此查询有效;也就是说,它返回预期的结果:
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);
这可能是一件微不足道的事情,我只是还没有把握这个概念...但我已经花了太多时间试图解决这个问题 - 因此这个问题。
答案 0 :(得分:5)
使用参数是正确的方法。您绝对不想要将值放入查询本身,就像在第一个代码段中那样。但是,您已将@name
放在引号中,这意味着它被视为字符串文字......它正在查找名称值@name
,而不是@name
的值参数。你想要:
var r = sql.Query<T>("select * from TableName where Name = @name", new { name });
(这可能是传递参数的最简单方法,但其他方法也应该有效。)
现在我自己并没有使用 Dapper,但这就是我所期待的......