C# でストアド プロシージャに文字列のリストを渡す
C# から SQL Server ストアド プロシージャを呼び出す場合、文字列のリストを渡すパラメータとして設定するのは難しい場合があります。ただし、SQL Server 2008 以降には、ユーザー定義テーブル タイプ (UDTT) 機能を使用する解決策があります。
UDTT の作成
まず、UDTT を作成して、文字列のリストを表します:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
ストアド プロシージャ
ストアド プロシージャで、UDTT をパラメータとして宣言します。
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Just return the items we passed in SELECT l.Item FROM @list l; END
C# で UDTT を設定
In C# では、DataTable を作成し、という名前の文字列型の列を追加します。 "Item":
using System.Data; using System.Data.SqlClient; ... DataTable table = new DataTable(); table.Columns.Add("Item", typeof(string));
文字列のリストを DataTable に入力します:
for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString());
DataTable を UDTT として渡す SqlParameter を作成します:
SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table;
リストをストアドに渡すプロシージャ
SqlParameter を SqlCommand に追加し、ストアド プロシージャを実行します。
using (SqlConnection con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { cmd.Parameters.Add(pList); using (SqlDataReader dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
このアプローチでは、文字列のリストを構造化形式でストアド プロシージャに渡すことができます。複雑なクエリを有効にします。
以上がC# から SQL Server ストアド プロシージャに文字列のリストを渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。