web-dev-qa-db-ja.com

ADO.Netを使用してテーブル値パラメーターを渡す

ADO.Netを使用してテーブル値パラメーターをストアドプロシージャに渡す方法

42
NIck
  1. SQL Serverでタイプを作成

    CREATE TYPE [dbo].[MyDataType] As Table
    (
        ID INT,
        Name NVARCHAR(50)
    )
    
  2. プロシージャの作成

    CREATE PROCEDURE [dbo].[MyProcedure]
    (
        @myData As [dbo].[MyDataType] Readonly
    )
    AS
    
    BEGIN
        SELECT * FROM @myData
    END
    
  3. C#でDataTableを作成

    DataTable myDataTable = new DataTable("MyDataType");
    myDataTable.Columns.Add("Name", typeof(string));
    myDataTable.Columns.Add("Id", typeof(Int32));
    myDataTable.Rows.Add("XYZ", 1);
    myDataTable.Rows.Add("ABC", 2);
    
  4. SQLパラメーターの作成

    SqlParameter parameter = new SqlParameter();
    parameter.ParameterName = "@myData";
    parameter.SqlDbType = System.Data.SqlDbType.Structured;
    parameter.Value = myDataTable;
    command.Parameters.Add(parameter); 
    
69
Naresh Goradara

私はこれを試して、例外を受け取りました:

テーブルタイプパラメータ '@MyDataType'には有効なタイプ名が必要です。

SqlParameterの「TypeName」プロパティを設定する必要がありました。

parameter.TypeName = "MyDataType";
15
Matt Martin

この質問は、 。netコードからストアドプロシージャにテーブル値パラメーターを渡す方法 と重複しています。 DataTableまたはIEnumerable<SqlDataRecord>の使用を示す例については、その質問を参照してください。

0
Ryan Prechel