Meluluskan senarai ke prosedur tersimpan SQL Server dalam C#
Soalan:
Anda perlu menghantar senarai rentetan daripada kod C# anda kepada prosedur tersimpan SQL Server. Walau bagaimanapun, senarai ini adalah dinamik dan mengandungi beratus-ratus item.
Penyelesaian:
Gunakan jenis jadual takrif pengguna (UDTT)
SQL Server 2008 dan kemudiannya menawarkan Jenis Jadual Ditakrifkan Pengguna (UDTT), membolehkan anda mencipta jenis data tersuai untuk digunakan dalam prosedur tersimpan. Sila ikut langkah berikut:
<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );</code>
<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END</code>
<code class="language-csharp">using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目 { table.Rows.Add("Item " + i); } }</code>
<code class="language-csharp">var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;</code>
<code class="language-csharp">using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { cmd.Parameters.Add(pList); using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }</code>
Ingat untuk menggantikan connstring
dengan rentetan sambungan anda sendiri. Contoh kod ini menganggap senarai anda mengandungi 1000 item, anda perlu melaraskan gelung berdasarkan saiz senarai sebenar. Selain itu, pastikan contoh SQL Server anda telah mendayakan penggunaan parameter READONLY
.
Atas ialah kandungan terperinci Bagaimana untuk Lulus Senarai Rentetan C# ke Prosedur Tersimpan Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!