Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Lulus Parameter Array ke SqlCommand dalam C#?

Bagaimana untuk Lulus Parameter Array ke SqlCommand dalam C#?

Patricia Arquette
Lepaskan: 2025-01-26 17:41:14
asal
573 orang telah melayarinya

How to Pass Array Parameters to a SqlCommand in C#?

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:

  1. Tentukan parameter tatasusunan:

    Buat tatasusunan parameter dengan nama dan jenis data yang diperlukan.

  2. 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.

  3. 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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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