Melalukan parameter tatasusunan ke SqlCommand dalam C#
Dalam C#, apabila cuba menghantar parameter tatasusunan kepada arahan SQL, mungkin terdapat isu yang tidak berfungsi seperti yang diharapkan. Punca utama ialah tatasusunan tidak boleh ditambah secara langsung sebagai parameter kepada SqlCommand. Untuk menyelesaikan masalah ini, setiap nilai dalam tatasusunan mesti ditambah secara individu.
Penyelesaian:
Tentukan parameter tatasusunan:
Buat tatasusunan parameter dengan nama dan jenis data yang diperlukan.
Tambah parameter pada SqlCommand:
Untuk setiap nilai dalam tatasusunan, tambah objek SqlParameter baharu dan nyatakan nama dan nilai yang sepadan. Jika perlu, tetapkan SqlDbType dan saiz yang sesuai.
Ganti klausa IN:
Ganti pemegang tempat "{parameterNameRoot}" dalam CommandText dengan senarai nama parameter yang dipisahkan koma.
Contoh:
<code class="language-csharp">var parameters = new string[items.Length]; // 此处items应替换为实际的数组变量 var cmd = new SqlCommand(); for (int i = 0; i < items.Length; i++) { cmd.Parameters.AddWithValue("@param" + i, items[i]); } cmd.CommandText = cmd.CommandText.Replace("{param}", string.Join(",", Enumerable.Range(0, items.Length).Select(i => "@param" + i)));</code>
Penyelesaian yang dipertingkatkan:
Penyelesaian yang dipertingkatkan dan boleh diguna semula boleh dilaksanakan sebagai kaedah lanjutan:
<code class="language-csharp">public static class SqlCommandExt { public static SqlParameter[] AddArrayParameters<T>(this SqlCommand cmd, string paramNameRoot, IEnumerable<T> values, SqlDbType? dbType = null, int? size = null) { var parameters = new List<SqlParameter>(); var parameterNames = new List<string>(); var paramNbr = 1; foreach (var value in values) { var paramName = string.Format("@{0}{1}", paramNameRoot, paramNbr++); parameterNames.Add(paramName); var p = new SqlParameter(paramName, value); if (dbType.HasValue) p.SqlDbType = dbType.Value; if (size.HasValue) p.Size = size.Value; cmd.Parameters.Add(p); parameters.Add(p); } cmd.CommandText = cmd.CommandText.Replace("{" + paramNameRoot + "}", string.Join(",", parameterNames)); return parameters.ToArray(); } }</code>
Penggunaan:
<code class="language-csharp">var cmd = new SqlCommand("SELECT * FROM TableA WHERE Age IN ({Age})"); cmd.AddArrayParameters("Age", new int[] { 1, 2, 3 });</code>
Contoh yang dipertingkatkan ini menggunakan generik, menjadikannya lebih fleksibel dan membolehkan SqlDbType dan Saiz ditentukan. Ia juga mengelakkan potensi risiko keselamatan penyambungan nama parameter secara langsung dalam CommandText. Ingat, dalam penggunaan sebenar, gantikan TableA
dan Age
dengan nama jadual dan lajur sebenar anda.
Atas ialah kandungan terperinci Bagaimana untuk Lulus Parameter Array ke SqlCommand dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!