ADO.Netを使用してテーブル値パラメーターをストアドプロシージャに渡す方法
SQL Serverでタイプを作成:
CREATE TYPE [dbo].[MyDataType] As Table
(
ID INT,
Name NVARCHAR(50)
)
プロシージャの作成:
CREATE PROCEDURE [dbo].[MyProcedure]
(
@myData As [dbo].[MyDataType] Readonly
)
AS
BEGIN
SELECT * FROM @myData
END
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);
SQLパラメーターの作成:
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@myData";
parameter.SqlDbType = System.Data.SqlDbType.Structured;
parameter.Value = myDataTable;
command.Parameters.Add(parameter);
私はこれを試して、例外を受け取りました:
テーブルタイプパラメータ '@MyDataType'には有効なタイプ名が必要です。
SqlParameterの「TypeName」プロパティを設定する必要がありました。
parameter.TypeName = "MyDataType";
この質問は、 。netコードからストアドプロシージャにテーブル値パラメーターを渡す方法 と重複しています。 DataTable
またはIEnumerable<SqlDataRecord>
の使用を示す例については、その質問を参照してください。