Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 简洁的查询-修复“问题”;靠近…“的未闭合引号;错误_C#_Dapper - Fatal编程技术网

C# 简洁的查询-修复“问题”;靠近…“的未闭合引号;错误

C# 简洁的查询-修复“问题”;靠近…“的未闭合引号;错误,c#,dapper,C#,Dapper,这个查询有效;也就是说,它返回预期结果: var r = sql.Query<T>("select * from TableName where Name = '" + name + "'"); var r=sql.Query(“从TableName中选择*,其中Name=”+Name+”); 但是,如果其中一个“names”值包含撇号(这是true),则会抛出异常“{”靠近“Resources”的语法不正确。\r\n在字符串“”后面加上引号。“}”-以尝试,我的查询不再返回任何

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

var r = sql.Query<T>("select * from TableName where Name = '" + name + "'");
var r=sql.Query(“从TableName中选择*,其中Name=”+Name+”);
但是,如果其中一个“names”值包含撇号(这是true),则会抛出异常“{”靠近“Resources”的语法不正确。\r\n在字符串“”后面加上引号。“}”-以尝试,我的查询不再返回任何结果;但它应该这样做

我尝试用几种方法更改代码,但以下更改都不会返回结果:

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

var args=新的动态参数(名称);
var r=sql.Query(“从TableName中选择*,其中Name='@Name',args);

var args=new DynamicParameters();args.AddDynamicParams(新的{name});
var r=sql.Query(“从TableName中选择*,其中Name='@Name',args);

var args=new DynamicParameters();args.Add(“@name”,name);
var r=sql.Query(“从TableName中选择*,其中Name='@Name',args);

这可能是一些琐碎的事情,我只是还没有掌握的概念。。。但是我已经花了太多的时间试图弄明白这一点-因此问题就来了。

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

var r = sql.Query<T>("select * from TableName where Name = @name", new { name });
var r=sql.Query(“从TableName中选择*,其中Name=@Name”,new{Name});
(这可能是传递参数的最简单方法,不过其他方法也应该可以。)


现在我自己还没有真正使用过整洁,但这正是我所期望的…

这正是我在阅读了你最初发布的答案后所做的!我知道它必须是一些琐碎的东西——我没有意识到将
@name
放在单引号中会迫使它被视为字符串文本。谢谢。当一个库的非用户所期望的确实是API的工作方式时,我很高兴。这表明我们做对了。
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);
var r = sql.Query<T>("select * from TableName where Name = @name", new { name });