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:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- 只返回我们传入的项目 SELECT l.Item FROM @list l; END
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 1000; i++) // 假设列表包含1000个项目 { table.Rows.Add("Item " + i); } }
var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;
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()); } } }
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!