Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menentukan Nama Lajur Secara Dinamik dalam Pertanyaan C# SqlCommand Semasa Mencegah Suntikan SQL?
Pelarasan Pertanyaan Dinamik untuk Nama Lajur dalam C# SqlCommand
Apabila cuba menentukan nama lajur menggunakan parameter dalam objek SqlCommand, anda mungkin menghadapi ralat menyatakan bahawa parameter tidak boleh digunakan untuk nama lajur. Had ini menimbulkan cabaran apabila cuba melaksanakan pertanyaan yang mana nama lajur mungkin berbeza-beza.
Masalah:
SqlCommand command = new SqlCommand("SELECT @slot FROM Users WHERE name=@name; "); prikaz.Parameters.AddWithValue("name", name); prikaz.Parameters.AddWithValue("slot", slot);
Kod di atas cuba melaksanakan pertanyaan dengan lajur dinamik nama menggunakanparameter, tetapi ia gagal dengan ralat yang disebutkan di atas. Penyelesaian yang berpotensi dicadangkan ialah penggunaan prosedur tersimpan (SP) dengan pengisytiharan berubah-ubah untuk nama lajur. Walau bagaimanapun, pendekatan ini boleh menyusahkan.
Penyelesaian:
Daripada menentukan parameter nama lajur, anda boleh membina pertanyaan secara dinamik pada masa jalan. Untuk memastikan keselamatan, anda harus menyenarai putih input untuk mengelakkan serangan suntikan. Berikut ialah contoh cara anda boleh mencapai ini:
// TODO: verify that "slot" is an approved/expected value SqlCommand command = new SqlCommand("SELECT [" + slot + "] FROM Users WHERE name=@name; ") prikaz.Parameters.AddWithValue("name", name);
Dalam kod ini, nilai "slot" digunakan untuk membina rentetan pertanyaan semasa masa jalan. Parameter "nama" masih ditentukan menggunakan parameter untuk menghalang suntikan SQL. Dengan membina pertanyaan secara dinamik, anda boleh mengatasi had penggunaan parameter untuk nama lajur dalam SqlCommand.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Nama Lajur Secara Dinamik dalam Pertanyaan C# SqlCommand Semasa Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!