Rumah >pangkalan data >tutorial mysql >Mengapa Pertanyaan SQL Saya Membuang Ralat 'Nama Pembolehubah Sudah Diisytiharkan'?
Mesej ralat anda, "Nama pembolehubah '@' telah pun diisytiharkan. Nama pembolehubah mestilah unik dalam kumpulan pertanyaan atau prosedur tersimpan," menunjukkan konflik dalam penamaan pembolehubah dalam SQL anda kod.
Dalam coretan kod yang disediakan, isu timbul apabila cuba menggunakan nama pembolehubah yang sama, "@LockState," beberapa kali dalam gelung dalam pengendali acara "btn_lock2_Click". SQL memerlukan nama pembolehubah unik dalam pertanyaan atau prosedur tersimpan untuk mengelakkan kekeliruan dan kekaburan.
Satu cara untuk menyelesaikan konflik adalah untuk mengosongkan koleksi parameter sebelum setiap lelaran gelung. Ini memastikan bahawa nama parameter yang sama tidak ditambahkan beberapa kali pada koleksi.
untuk (kaunter panjang = dari; kaunter <= ke; kaunter )
{
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; ...
}
Sebagai alternatif, anda boleh menentukan parameter sebelum gelung dan kemudian mengemas kini nilainya dalam setiap lelaran. Pendekatan ini memastikan bahawa parameter wujud dalam koleksi sebelum gelung bermula, menghapuskan keperluan untuk mengosongkan.
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(baharu SqlParameter("@card_descr", SqlDbType.NVarChar));
untuk (kaunter panjang = dari; kaunter <= ke; kaunter )
{
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; ...
}
Dengan menggunakan salah satu daripada penyelesaian ini, anda boleh memastikan bahawa pertanyaan SQL anda mempunyai nama pembolehubah yang unik, menghalang ralat "sudah diisytiharkan".
Atas ialah kandungan terperinci Mengapa Pertanyaan SQL Saya Membuang Ralat 'Nama Pembolehubah Sudah Diisytiharkan'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!