Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggunakan Senarai dengan Selamat sebagai SqlParameter untuk Penyata SQL IN?

Bagaimana untuk Menggunakan Senarai dengan Selamat sebagai SqlParameter untuk Penyata SQL IN?

Patricia Arquette
Patricia Arquetteasal
2024-12-28 07:05:23933semak imbas

How to Safely Use a List as a SqlParameter for an SQL IN Statement?

Menterjemah Senarai ke dalam SqlParameter untuk Penyata SQL IN

Disertai dalam pertanyaan, pernyataan "IN" menentukan bahawa lajur tertentu mesti mempunyai nilai yang sepadan dalam senarai nilai yang disediakan. Apabila bekerja dengan pernyataan SQL IN menggunakan objek SqlCommand, kekeliruan mungkin timbul mengenai penukaran Senarai ke dalam SqlParameter yang serasi.

Dalam coretan kod yang disediakan:

cmd.CommandText = "Select dscr from system_settings where setting in @settings";
cmd.Connection = conn;
cmd.Parameters.Add(new SqlParameter("@settings", settingsList));

reader = cmd.ExecuteReader();

Senarai tetapan parameter mewakili Senarai mengandungi nilai yang akan dinilai dalam pernyataan IN. Walau bagaimanapun, pemetaan langsung Senarai kepada SqlParameter mendorong pengecualian kerana ketidakserasian dengan jenis pembekal yang diketahui.

Untuk melaksanakan pertanyaan IN dengan selamat dengan SqlCommands, pertimbangkan untuk menggunakan pendekatan berikut:

  1. Bina Pernyataan dengan Pemegang tempat:
string sql = "SELECT dscr FROM system_settings WHERE setting IN ({0})";

Dalam pernyataan ini, {0} berfungsi sebagai pemegang tempat untuk senarai parameter dinamik yang dijana dalam langkah seterusnya.

  1. Sediakan Tatasusunan Parameter:
string[] paramArray = settingList.Select((x, i) => "@settings" + i).ToArray();

Di sini, paramArray tatasusunan rentetan diperoleh dengan melelaran melalui settingsList dan memberikan setiap nilai kepada parameter yang dinamakan bagi borang "@settings0", "@settings1", dll.

  1. Gabungkan Pernyataan dengan Parameter:
cmd.CommandText = string.Format(sql, string.Join(",", paramArray));

Kaedah Format menggabungkan pernyataan templat dengan senarai parameter, menghasilkan SQL berparameter pernyataan.

  1. Tambah Parameter:
for (int i = 0; i < settingList.Count; ++i)
{
    cmd.Parameters.Add(new SqlParameter("@settings" + i, settingList[i]));
}

Parameter individu ditambah pada objek SqlCommand menggunakan gelung yang berulang melalui settingsList untuk memastikan bahawa setiap nilai mempunyai parameter yang sepadan.

Dengan mengikuti langkah-langkah ini, anda boleh melaksanakan IN dengan berkesan pertanyaan dengan objek SqlCommand menggunakan Senarai sebagai input sambil mengekalkan keselamatan data dan mencegah kemungkinan serangan suntikan.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan Senarai dengan Selamat sebagai SqlParameter untuk Penyata SQL IN?. 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