我必须升级以下代码才能使用预准备语句:
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)吗?
答案 0 :(得分:1)
看起来你在查询中使用位置参数(即?
,而不是@UNIQUE_ID
),这意味着就SQL而言,参数的名称无关紧要。但是,如果看到提供商抱怨,我不会完全惊讶......它也可能使诊断变得更加困难。我建议你使用索引作为后缀:
cmd.Parameters.Add("@UNIQUE_ID" + i, ObdcType.BigInt).Value = lUniqueIDs[i];