准备好的语句 - 迭代查询

时间:2011-02-13 13:28:22

标签: c# sql iteration prepared-statement

我必须升级以下代码才能使用预准备语句:

OdbcCommand cmd = sql.CreateCommand();
cmd.CommandText = "SELECT [EMail] from myTable WHERE "+,
for (int i = 0; i < 50; i++)
{
   if (i > 0)
   {
      cmd.CommandText += " OR ";
   }
   cmd.CommandText += "UNIQUE_ID = " + lUniqueIDS[i];
}

禁止我上面的愚蠢代码,这只是一个例子......我正在尝试获取ID为x,y,z等的所有用户电子邮件...

问题是 - 如何使用预准备语句重写它? 盲目天真的猜测将是

for (int i = 0; i < 50; i++)
{
   if (i > 0)
   {
      cmd.CommandText += " OR ";
   }
   cmd.CommandText += "UNIQUE_ID = ?";
   cmd.Parameters.Add("@UNIQUE_ID", OdbcType.BigInt).Value = lUniqueIDS[i];
}

它应该有用吗?我可以多次附加相同的参数(unique_id)吗?

1 个答案:

答案 0 :(得分:1)

看起来你在查询中使用位置参数(即?,而不是@UNIQUE_ID),这意味着就SQL而言,参数的名称无关紧要。但是,如果看到提供商抱怨,我不会完全惊讶......它也可能使诊断变得更加困难。我建议你使用索引作为后缀:

cmd.Parameters.Add("@UNIQUE_ID" + i, ObdcType.BigInt).Value = lUniqueIDs[i];