a.TypeName ="dbo.TableTypeInitial"; このステートメントを "a.SqlDbType =SqlDbType.Structured;" の前に配置してください
使用
cmd.CommandText ="EXEC FinishRegisterChoiceUserInitial @UserId, @TableTypeInitial "; コード> プレ>
の代わりに cmd.CommandText ="EXEC FinishRegisterChoiceUserInitial @UserId, @CurrentTableInitial "; コード> プレ>
SQL サーバー スクリプト:
CREATE TABLE [Target] ( [ID] [int] NOT NULL PRIMARY KEY IDENTITY, [FirstName] [varchar](100)NOT NULL, [LastName] [varchar](100)NOT NULL, [Email ] [varchar](200) NOT NULL ) CREATE TYPE [TargetUDT] AS TABLE ( [FirstName] [varchar](100)NOT NULL, [LastName] [varchar](100)NOT NULL, [Email] [varchar](200 ) NOT NULL ) CREATE PROCEDURE AddToTarget(@TargetUDT TargetUDT READONLY) AS BEGIN INSERT INTO [Target] SELECT * FROM @TargetUDT END
プレ>
サンプル コード :
public static void StartProcess() { //顧客レコードを保持するローカル データ テーブルを作成します DataTable dtCustomers =new DataTable("Customers"); DataColumn dcFirstName =new DataColumn("FirstName", typeof(string)); DataColumn dcLastName =new DataColumn("LastName", typeof(string)); DataColumn dcEmail =new DataColumn("Email", typeof(string)); dtCustomers.Columns.Add(dcFirstName); dtCustomers.Columns.Add(dcLastName); dtCustomers.Columns.Add(dcEmail); //顧客 1 の DataRow を追加 drCustomer =dtCustomers.NewRow(); drCustomer["名"] ="AAA"; drCustomer["姓"] ="XYZ"; drCustomer["Email"] ="[email protected]
"; dtCustomers.Rows.Add(drCustomer); //顧客 2 を追加 drCustomer =dtCustomers.NewRow(); drCustomer["FirstName"] ="BBB"; drCustomer["LastName"] ="XYZ"; drCustomer["Email "] ="[email protected]
"; dtCustomers.Rows.Add(drCustomer); //顧客 3 を追加 drCustomer =dtCustomers.NewRow(); drCustomer["FirstName"] ="CCC"; drCustomer["LastName"] ="XYZ"; drCustomer["Email "] ="[email protected]
"; dtCustomers.Rows.Add(drCustomer); //サーバー/データベースに接続する Connection オブジェクトを作成します SqlConnection conn =new SqlConnection(ConStr); conn.Open(); //ストアド プロシージャ SqlCommand cmdCustomer を呼び出すコマンド オブジェクトを作成します=new SqlCommand("AddToTarget", conn); cmdCustomer.CommandType =CommandType.StoredProcedure; //新しい SQL DB 型を使用してパラメーターを作成します.つまり、テーブル値として渡すように構造化されたパラメーター SqlParameter paramCustomer =cmdCustomer.Parameters.Add("@ TargetUDT", SqlDbType.Structured); paramCustomer.Value =dtCustomers; //クエリを実行します cmdCustomer.ExecuteNonQuery(); }
プレ>