C# から SQL Server ストアド プロシージャにリストを渡す
指定された C# コードでは、ストアド プロシージャがさまざまなパラメーター値を使用して呼び出されています。文字列のリストも含まれます。ただし、ストアド プロシージャ内のクエリでは、IN 句の一部としてリストを渡す必要があります。
解決策: ユーザー定義のテーブル タイプの使用 (SQL Server 2008 )
SQL Server 2008 では、データのコレクションを構造化された方法でストアド プロシージャに渡すことができる機能であるユーザー定義テーブル タイプが導入されました。このソリューションを実装する方法は次のとおりです。
1.ユーザー定義のテーブル タイプの作成
文字列のリストに対応するテーブル タイプを作成します。例:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
2.ストアド プロシージャを変更します
テーブル タイプを入力パラメータとして受け入れるようにストアド プロシージャを調整します。
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Query using the table type SELECT l.Item FROM @list l; END
3. C# でテーブル型を設定する
C# で DataTable オブジェクトを作成し、それに文字列のリストを設定します。次に、DataTable をストアド プロシージャに渡すパラメーターを定義します。
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table; cmd.Parameters.Add(pList); }
4.ストアド プロシージャを実行します
設定された SqlParameter オブジェクトを使用してストアド プロシージャを実行します。
使用例:
using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
以上がC# 文字列リストを SQL Server ストアド プロシージャの IN 句に渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。