您的錯誤訊息,「變數名稱'@' 已被宣告。變數名稱在查詢批次或預存程序中必須是唯一的”,表示SQL 中的變數命名存在衝突代碼。
在提供的程式碼片段中,當嘗試在「btn_lock2_Click」事件處理程序中的循環中多次使用相同的變數名稱「@LockState」時,會出現問題。 SQL 要求查詢或預存程序中的變數名稱唯一,以防止混淆和歧義。
一種解決方法衝突是在每次循環迭代之前清除參數集合。這可確保相同的參數名稱不會多次新增到集合中。
for (long counter = from; counter {
rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar)).Value = 1; rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar)).Value = txt_desc2.Text; ...
}
或者,您可以在循環之前定義參數,然後在每次迭代中更新它們的值。這種方法確保參數在循環開始之前存在於集合中,從而無需清除。
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SlTypeDbType ));
for (長計數器= from; counter {
string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'"; rwd.command.CommandText = upd; rwd.command.Parameters["@LockState"].Value = 1; rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text; ...
}
透過使用這些解決方案中的任何一個,您都可以確保您的SQL查詢具有唯一的變數名稱,從而防止“已聲明”錯誤。
以上是為什麼我的 SQL 查詢會拋出'變數名稱已聲明”錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!