dapper query - 修复“未闭合的引号附近...”错误

时间:2014-11-01 19:45:41

标签: c# dapper

此查询有效;也就是说,它返回预期的结果:

var r = sql.Query<T>("select * from TableName where Name = '" + name + "'");

但是,如果其中一个'名称'值包含萎缩(这是真的),则会在'资源'附近抛出异常'{“语法错误。\ r \ n在字符串''后面有未引用的引号。 “}' - 在尝试fix that problem时,我的查询不再返回任何结果;但它应该。

我试图通过几种方式更改代码,但不会返回以下任何一项更改的结果:

var r = sql.Query<T>("select * from TableName where Name = '@name'", new { name });

var args = new DynamicParameters(name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

var args = new DynamicParameters(); args.AddDynamicParams(new { name });
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

var args = new DynamicParameters(); args.Add("@name", name);
var r = sql.Query<T>("select * from TableName where Name = '@name'", args);

这可能是一件微不足道的事情,我只是还没有把握这个概念...但我已经花了太多时间试图解决这个问题 - 因此这个问题。

1 个答案:

答案 0 :(得分:5)

使用参数是正确的方法。您绝对想要将值放入查询本身,就像在第一个代码段中那样。但是,您已将@name放在引号中,这意味着它被视为字符串文字......它正在查找名称值@name,而不是@name的值参数。你想要:

var r = sql.Query<T>("select * from TableName where Name = @name", new { name });

(这可能是传递参数的最简单方法,但其他方法也应该有效。)

现在我自己并没有使用 Dapper,但这就是我所期待的......