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!