Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meluluskan Senarai Rentetan dari C# ke Prosedur Tersimpan Pelayan SQL dengan Cekap?

Bagaimana untuk Meluluskan Senarai Rentetan dari C# ke Prosedur Tersimpan Pelayan SQL dengan Cekap?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-13 10:50:42365semak imbas

How to Efficiently Pass a List of Strings from C# to a SQL Server Stored Procedure?

C# dan SQL Server: Mengendalikan Senarai Rentetan dengan Cekap dalam Prosedur Tersimpan

Cabaran biasa apabila berinteraksi dengan prosedur tersimpan SQL Server daripada C# melibatkan menghantar senarai dinamik nilai rentetan. Artikel ini menunjukkan penyelesaian yang teguh menggunakan Jenis Jadual Ditakrifkan Pengguna (UDTT).

Masalahnya: Senarai Rentetan Dinamik

Bayangkan prosedur tersimpan yang perlu menapis hasil berdasarkan senarai rentetan panjang berubah-ubah. Melepasi terus senarai ini boleh menjadi masalah.

Penyelesaian: Jenis Jadual Ditakrifkan Pengguna (UDTT)

SQL Server 2008 dan versi yang lebih baru menawarkan UDTT sebagai penyelesaian yang elegan. Kami akan membuat UDTT yang dipanggil StringList untuk merangkum koleksi rentetan kami.

Membuat Prosedur Tersimpan

Prosedur tersimpan ini menggunakan jenis StringList:

<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Retrieve and return items from the input list
    SELECT l.Item FROM @list l;
END</code>

Pelaksanaan C#

Kod C# di bawah menunjukkan cara menggunakan prosedur tersimpan ini:

<code class="language-csharp">using (var con = new SqlConnection(connstring))
{
    con.Open();

    using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con))
    {
        // Create a DataTable to hold the string list
        using (var table = new DataTable())
        {
            table.Columns.Add("Item", typeof(string));

            // Add sample data – replace with your actual list
            for (int i = 0; i < 10; i++)
            {
                table.Rows.Add("String" + i);
            }

            // Add the DataTable as a parameter to the command.
            SqlParameter tvpParam = cmd.Parameters.AddWithValue("@list", table);
            tvpParam.SqlDbType = SqlDbType.Structured;
            tvpParam.TypeName = "dbo.StringList";

            // Execute the command.
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                // Process the results
                while (reader.Read())
                {
                    Console.WriteLine(reader["Item"].ToString());
                }
            }
        }
    }
}</code>

Contoh Pelaksanaan SSMS

Untuk ujian dalam SQL Server Management Studio (SSMS):

<code class="language-sql">DECLARE @list AS StringList;

INSERT INTO @list VALUES ('Apple'), ('Banana'), ('Orange');

EXEC sp_UseStringList @list;</code>

Pendekatan ini menyediakan kaedah yang bersih dan cekap untuk menghantar senarai rentetan daripada C# ke prosedur tersimpan SQL Server, memanfaatkan kuasa UDTT untuk pemindahan data berstruktur. Ingat untuk menggantikan "dbo.StringList" dengan skema dan nama yang betul jika anda telah mengubahnya.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Senarai Rentetan dari C# ke Prosedur Tersimpan Pelayan SQL dengan Cekap?. 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