在查询的where子句中参数化多个OR

本文关键字:OR 参数 查询 where 子句 | 更新日期: 2023-09-27 18:19:48

我想参数化这个:

select * from myTable where column1='1' or 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));
 }

但是我得到了一个异常

System.Data.SqlClient.SqlException :The variable name '@column1' has already been declared.Variable names must be unique within a query batch or stored procedure.
Incorrect syntax near 'or'.

在查询的where子句中参数化多个OR

错误显而易见。您在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));
}