Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memperbaiki 'Nama pembolehubah '@' telah diisytiharkan' Ralat dalam Batch Query SQL?
Konflik Nama Pembolehubah dalam Kelompok Pertanyaan SQL
Apabila melaksanakan pertanyaan SQL, adalah penting untuk memastikan keunikan dalam nama pembolehubah dalam satu kelompok atau prosedur tersimpan . Ralat "Nama pembolehubah '@' telah pun diisytiharkan" menunjukkan bahawa berbilang pembolehubah dengan nama yang sama telah ditakrifkan.
Untuk menyelesaikannya, fokus pada blok kod yang disediakan:
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; // ... } }
Kesilapan terletak pada penambahan berulang kali parameter dalam gelung. Sebaliknya, alihkan penciptaan parameter di luar gelung:
// 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; // ... }
Sebagai alternatif, pertimbangkan untuk mengosongkan parameter dalam gelung:
for (long counter = from; counter <= to; counter++) { rwd.command.Parameters.Clear(); // ... }
Dengan mengikuti pengesyoran ini, anda boleh menghapuskan ralat dan memastikan keunikan nama pembolehubah dalam pertanyaan SQL anda.
Atas ialah kandungan terperinci Bagaimana untuk Memperbaiki 'Nama pembolehubah '@' telah diisytiharkan' Ralat dalam Batch Query SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!