首頁 >資料庫 >mysql教程 >如何修復 SQL 查詢批次中的「變數名稱 '@' 已宣告」錯誤?

如何修復 SQL 查詢批次中的「變數名稱 '@' 已宣告」錯誤?

Susan Sarandon
Susan Sarandon原創
2025-01-01 08:24:11708瀏覽

How to Fix

SQL 查詢批次中的變數名稱衝突

執行SQL 查詢時,請確保批次或儲存過程中變數名稱的唯一性至關重要。錯誤「變數名稱‘@’已被宣告」表示定義了多個同名變數。

要解決此問題,請注意提供的程式碼區塊:

private void btn_lock2_Click(object sender, EventArgs e)
{
    // ...
    for (long counter = from; counter <= to; counter++)
    {
        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;
        // ...
    }
}

錯誤在於循環內重複新增參數。相反,請將參數建立移到循環之外:

// Moved outside the loop
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));

for (long counter = from; counter <= to; counter++)
{
    // ...
    rwd.command.Parameters["@LockState"].Value = 1;
    rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;
    // ...
}

或者,考慮清除循環內的參數:

for (long counter = from; counter <= to; counter++)
{
    rwd.command.Parameters.Clear();
    // ...
}

透過遵循這些建議,您可以消除錯誤並確保SQL 查詢中變數名稱的唯一性。

以上是如何修復 SQL 查詢批次中的「變數名稱 '@' 已宣告」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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