首頁 >資料庫 >mysql教程 >為什麼我的 SQL 查詢會拋出'變數名稱已聲明”錯誤?

為什麼我的 SQL 查詢會拋出'變數名稱已聲明”錯誤?

Susan Sarandon
Susan Sarandon原創
2025-01-03 08:42:39316瀏覽

Why Does My SQL Query Throw a

SQL 查詢中的變數名稱衝突

您的錯誤訊息,「變數名稱'@' 已被宣告。變數名稱在查詢批次或預存程序中必須是唯一的”,表示SQL 中的變數命名存在衝突代碼。

在提供的程式碼片段中,當嘗試在「btn_lock2_Click」事件處理程序中的循環中多次使用相同的變數名稱「@LockState」時,會出現問題。 SQL 要求查詢或預存程序中的變數名稱唯一,以防止混淆和歧義。

解 1:每次循環迭代後清除參數

一種解決方法衝突是在每次循環迭代之前清除參數集合。這可確保相同的參數名稱不會多次新增到集合中。

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;
...

}

解2:之前定義參數循環

或者,您可以在循環之前定義參數,然後在每次迭代中更新它們的值。這種方法確保參數在循環開始之前存在於集合中,從而無需清除。

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn