C# 和 SQL Server:高效處理預存程序中的字串清單
透過 C# 與 SQL Server 預存程序互動時的常見挑戰涉及傳遞動態字串值清單。 本文示範了使用使用者定義表類型 (UDTT) 的強大解決方案。
問題:動態字串清單
想像一個預存程序需要根據可變長度的字串列表過濾結果。 直接傳遞這個清單可能會出現問題。
解決方案:使用者定義的表格類型 (UDTT)
SQL Server 2008 及更高版本提供 UDTT 作為一種優雅的解決方案。 我們將建立一個名為 StringList
的 UDTT 來封裝我們的字串集合。
建立預存程序
此預存程序使用 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>
C# 實作
下面的 C# 程式碼示範如何使用此預存程序:
<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>
SSMS 執行範例
對於在 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>
此方法提供了一種乾淨、高效的方法,用於將字串清單從 C# 傳遞到 SQL Server 預存程序,利用 UDTT 的強大功能進行結構化資料傳輸。 如果您更改了 "dbo.StringList"
,請記住將其替換為正確的架構和名稱。
以上是如何有效地將字串清單從 C# 傳遞到 SQL Server 預存程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!