C# 在查询的where子句中参数化多个或
我想将其参数化: 从myTable中选择*,其中column1='1'或TaxRateRef='18' 变成这样: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
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));
}