2011-02-13 89 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