Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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# 在查询的where子句中参数化多个或_C#_Sql Server - Fatal编程技术网

C# 在查询的where子句中参数化多个或

C# 在查询的where子句中参数化多个或,c#,sql-server,C#,Sql Server,我想将其参数化: 从myTable中选择*,其中column1='1'或TaxRateRef='18' 变成这样: String query = "select * from myTable where "; // column1='1' or column1='18' var parameters = new List<SqlParameter>(); for(int i = 0; i < data.Rows.Count;i++) { blah blah blah

我想将其参数化:

从myTable中选择*,其中column1='1'或TaxRateRef='18'

变成这样:

String query = "select * from myTable where "; // column1='1' or column1='18'

var parameters = new List<SqlParameter>();

for(int i = 0; i < data.Rows.Count;i++)
{
   blah blah blah

   query += " Column1='@column1' or";

   parameters.Add(new SqlParameter("@column1", i));

 }

错误是显而易见的。在for循环中添加参数的次数太多。您应该添加这一行

parameters.Add(new SqlParameter("@column1", i));
在您的查询中只有一次。如果您需要在循环的每次迭代中添加不同的值,只需将迭代编号i附加到参数名称,以使其唯一

 query += string.Format(" Column1='@column1{0}' or", i);
 parameters.Add(new SqlParameter(string.Format("@column1{0}", i), i));
原因是@column1一直在追加。使用下面的一个

parameters.Add(new SqlParameter(string.Format("@column1{0}", i), i));

String query = "select * from myTable where "; // column1='1' or column1='18'

var parameters = new List<SqlParameter>();

for(int i = 0; i < data.Rows.Count;i++)
{
  blah blah blah

  query += " Column1='@column1' or";

  parameters.Add(new SqlParameter("@column1", i));
  parameters.Add(new SqlParameter(string.Format("@column1{0}", i), i));

}

你能告诉我们在形成查询后执行的代码吗?是的,尽管我想不需要1@绝对是罗布法利。我刚刚复制/粘贴了…重点是parameters.Add在sql批处理中声明了一个新参数,并且参数名称在批处理中必须是唯一的…这就像在C中声明两个变量在同一范围内具有相同的名称是。您的代码是有效的-当您的评论出现时,我正在编写类似的代码。但后来我注意到1仍然在那里,我想我应该指出它,以防OP被搞糊涂了。
parameters.Add(new SqlParameter(string.Format("@column1{0}", i), i));

String query = "select * from myTable where "; // column1='1' or column1='18'

var parameters = new List<SqlParameter>();

for(int i = 0; i < data.Rows.Count;i++)
{
  blah blah blah

  query += " Column1='@column1' or";

  parameters.Add(new SqlParameter("@column1", i));
  parameters.Add(new SqlParameter(string.Format("@column1{0}", i), i));

}