2011-02-13 117 views
1

我必须升级以下代码使用预准备语句:预处理语句 - 迭代查询

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]; 
} 

禁止上面我愚蠢的代码,这只是一个例子......我试图获取所有的电子邮件用户的身份证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

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

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

和原来的行,cmd.CommandText + =“UNIQUE_ID =?”; 应该保持不变? – Nili 2011-02-13 13:35:02