C# SQL Server:在子句中和子句的一部分中未计算参数

C# SQL Server:在子句中和子句的一部分中未计算参数,c#,sql,sql-server,C#,Sql,Sql Server,以下带参数的SQL查询有效: select A from B where C = @param1; C: 注意:C是字符串类型的列 以下带参数的SQL查询不起作用: select A from B where C = @param1 and D in (@param2); C: 注意:D是int类型的列,因为不能像那样参数化in;您当前要求输入一个值,该值恰好是一个带逗号的字符串,也就是说,只有当有一行D等于123234456时,这才有效 每个值都需要一个参数,即 或者使用一个工具来为你做到

以下带参数的SQL查询有效:

select A from B where C = @param1;
C:

注意:C是字符串类型的列

以下带参数的SQL查询不起作用:

select A from B where C = @param1 and D in (@param2);
C:


注意:D是int类型的列

,因为不能像那样参数化in;您当前要求输入一个值,该值恰好是一个带逗号的字符串,也就是说,只有当有一行D等于123234456时,这才有效

每个值都需要一个参数,即

或者使用一个工具来为你做到这一点。例如,使用dapper:

string c = "TEXT"; 
int[] vals = { 123, 234, 456 };
var data = conn.Query<AType>("select A from B where C = @c and D in @vals",
      new { c, vals }).ToList();

因为你不能像那样参数化一个in;您当前要求输入一个值,该值恰好是一个带逗号的字符串,也就是说,只有当有一行D等于123234456时,这才有效

每个值都需要一个参数,即

或者使用一个工具来为你做到这一点。例如,使用dapper:

string c = "TEXT"; 
int[] vals = { 123, 234, 456 };
var data = conn.Query<AType>("select A from B where C = @c and D in @vals",
      new { c, vals }).ToList();

请参考下面的链接,它们还将数组传递给SQL IN子句


有关详细信息,请参阅:@Brian

回答,请参阅下面的链接,他们还将数组传递给SQL IN子句


有关详细信息,请参阅:由@Brian回答,它确实有效。它只是没有达到你的期望。表达方式:

D in (@param2)
他真的在做:

D = (@param2)
因为列表只包含一个元素。它是一个包含逗号的元素,但仍然只有一个字符串

解决此问题的一种方法是列出显式参数:

D in (@in1, @in2, @in3, @in4)
或使用效率较低的方法,如:


注意:这假设D是字符串类型。如果是数字,则需要将其转换为字符类型。

它确实有效。它只是没有达到你的期望。表达方式:

D in (@param2)
他真的在做:

D = (@param2)
因为列表只包含一个元素。它是一个包含逗号的元素,但仍然只有一个字符串

解决此问题的一种方法是列出显式参数:

D in (@in1, @in2, @in3, @in4)
或使用效率较低的方法,如:


注意:这假设D是字符串类型。如果是数字,则需要将其转换为字符类型。

您是指command.Parameters吗。AddWithValue@param2, 123,234,456; ?在中以错误的方式使用参数。。。需要一个值列表-而您提供的只是一个字符串…您是指command.Parameters吗。AddWithValue@param2, 123,234,456; ?在中以错误的方式使用参数。。。需要一个值列表-而您提供的只是一个字符串。。。。
',' + @param2 + ',' like '%,' + D + ',%'