ホームページ >バックエンド開発 >C++ >C# 文字列リストを SQL Server ストアド プロシージャの IN 句に渡す方法

C# 文字列リストを SQL Server ストアド プロシージャの IN 句に渡す方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-04 15:55:39469ブラウズ

How to Pass a C# String List to an SQL Server Stored Procedure's IN Clause?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。