Dapper 参数没有被替换

Posted

技术标签:

【中文标题】Dapper 参数没有被替换【英文标题】:Dapper parameters not being replaced 【发布时间】:2017-11-14 11:43:23 【问题描述】:

我已经在这个项目上使用 Dapper 几个月了,没有任何问题。但是现在我必须使用原始 SQL 而不是带有 dapper 的存储过程来创建和更改数据库中的 UsersRoles,因为 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);   

我不断收到同样的错误:

@UserLogin 的语法无效

我将我的domain\username 作为登录名传递,并且我也尝试过不使用domain\。一样。有人可以对此有所了解吗?

【问题讨论】:

您是否尝试过使用常规类而不是 DynamicParameters 类? 您不能使用参数来表示系统名称,如表、列甚至用户或角色。这不是 Dapper 的问题 我就是这么想的。您能否为此提供文档链接?我尝试自己寻找这类信息,以防万一。 角色参数是字符串吗? 【参考方案1】:

我不熟悉 Dapper,但您可以尝试将参数值嵌入到您发送执行的 SQL 字符串中:

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

请注意,这会带来安全风险,并可能导致其他问题!

【讨论】:

Note that this comes with security risks and may cause other problems! 那么你可能不建议这样做..

以上是关于Dapper 参数没有被替换的主要内容,如果未能解决你的问题,请参考以下文章

使用 dapper 替换成熟的 OR/M

Dapper提供程序相关参数令牌

csharp [002] Dapper Select没有#dapper类型

Dapper 示例代码的说明

Dapper 如何在没有 setter 的情况下设置属性

没有自定义 SQL 的 Dapper 中的多重映射