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!