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

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

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 00:53:40257ブラウズ

How to Pass a List of Strings to a SQL Server Stored Procedure from C#?

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

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