2017-06-12 67 views
3

我一直在这个项目上使用Dapper几个月并且一直没有问题。但现在我必须使用原始SQL而不是存储过程和精简器来创建和更改用户角色在数据库中,因为sp_addrolemember现在已被弃用。小巧的参数没有被替换

我用这个作为我的短小精悍代码

conn.Open(); 
var p = new DynamicParameters(); 
p.Add("@UserLogin", user); 
p.Add("@UserRole", role); 
conn.Execute("Create User @UserLogin", p); 
conn.Execute("ALTER ROLE @UserRole ADD MEMBER @UserLogin", p); 

我不断收到同样的错误:

Invalid syntax at @UserLogin

我通过我的domain\username的登录信息和我已经试过了没有domain\。一样。有人可以对此有所了解吗?

+2

您是否尝试过使用常规类而不是DynamicParameters类? – Gusman

+2

您不能使用参数来表示系统名称,如表,列或甚至用户或角色。这不是一个小巧的问题 – Steve

+0

这就是我在想什么。你能提供一个链接到这个文件吗?我试图寻找这种类型的信息,以防原因。 –

回答

-1

我不熟悉,小巧玲珑,但你可以尝试嵌入参数值到您发送要执行的SQL字符串:

conn.Open(); 
conn.Execute("Create User " + user); 
conn.Execute("ALTER ROLE " + role + " ADD MEMBER " + user); 

注意,这个自带的安全隐患,并可能导致其他的问题!

+1

'请注意,这有安全风险,可能会导致其他问题!'那么你可能不应该建议这样做.. – Rob