Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Konflik Nama Pembolehubah SQL dalam Gelung?

Bagaimana untuk Menyelesaikan Konflik Nama Pembolehubah SQL dalam Gelung?

Patricia Arquette
Lepaskan: 2025-01-02 18:13:44
asal
385 orang telah melayarinya

How to Resolve SQL Variable Name Conflicts in Loops?

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan