Konflik Nama Pembolehubah dalam SQL
Apabila melaksanakan pernyataan SQL, anda mungkin menghadapi mesej ralat yang menyatakan bahawa nama pembolehubah telah diisytiharkan dan mestilah unik dalam kumpulan pertanyaan atau prosedur tersimpan. Ini boleh berlaku dalam situasi di mana berbilang parameter dengan nama yang sama ditambah dalam gelung.
Sebagai contoh, pertimbangkan coretan kod berikut:
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; rwd.connection.Open(); rwd.command.ExecuteScalar(); rwd.connection.Close(); }
Dalam kod ini, pembolehubah @LockState ditambahkan pada parameter perintah SQL beberapa kali dalam gelung. Ini melanggar peraturan bahawa nama pembolehubah mestilah unik.
Untuk menyelesaikan isu ini, anda boleh sama ada menambah parameter di luar gelung dan kemudian mengemas kini nilainya dalam gelung atau gunakan kaedah Parameters.Clear() selepas setiap lelaran gelung untuk mengalih keluar parameter yang ditambahkan sebelum ini.
Berikut ialah contoh menambah parameter di luar gelung:
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++) { 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; rwd.connection.Open(); rwd.command.ExecuteScalar(); rwd.connection.Close(); }
Sebagai alternatif, anda boleh menggunakan Parameters.Clear() dalam gelung:
for (long counter = from; counter <= to; counter++) { rwd.command.Parameters.Clear(); 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; rwd.connection.Open(); rwd.command.ExecuteScalar(); rwd.connection.Close(); }
Dengan memastikan nama pembolehubah unik dalam parameter SQL anda, anda boleh mengelakkan perisytiharan pembolehubah yang bercanggah dan berjaya melaksanakan kenyataan anda.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Konflik Nama Pembolehubah SQL dalam Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!