Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menentukan Nama Lajur Secara Dinamik dalam Pertanyaan C# SqlCommand Semasa Mencegah Suntikan SQL?

Bagaimanakah Saya Boleh Menentukan Nama Lajur Secara Dinamik dalam Pertanyaan C# SqlCommand Semasa Mencegah Suntikan SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-18 09:18:11260semak imbas

How Can I Dynamically Specify Column Names in C# SqlCommand Queries While Preventing SQL Injection?

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!

Kenyataan:
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