2010-12-01 13 views
1

複数のテーブル値のパラメータを受け入れるストアドプロシージャにDataTableを渡そうとしています。 は、対応する13列(複数可)とテーブル値 パラメータを渡そうとし複数のテーブル値のパラメータを含むストアドプロシージャに複数のテーブルを渡す問題

:問題は、すべてのパラメータはので、私はこのようなエラーを取得しています最初の1に渡されているようだ、ですユーザー定義テーブルタイプ には17個の列が必要です。

ここに私のコードだ..

ストアドプロシージャヘッダー:PARM1 @

CREATE PROCEDURE TestProc 
@Parm1 Temp1TableType READONLY, 
@Parm2 Temp2TableType READONLY, 
@Parm3 Temp3TableType READONLY, 
@Parm4 Temp4TableType READONLY, 
@Parm5 Temp5TableType READONLY 

はPARM4 11列@ 17カラム、PARM2 @ 13列、PARM3 @ 3つの列を有し、Parm5が持ちます@ 8列。

C#コード(私はMicrosoft.ApplicationBlocksを使用)

DataTable dtTable1 = dsSource.Tables[0]; 
DataTable dtTable2 = dsSource.Tables[1]; 
DataTable dtTable3 = dsSource.Tables[2]; 
DataTable dtTable4 = dsSource.Tables[3]; 
DataTable dtTable5 = dsSource.Tables[4]; 

SqlParameter param1 = new SqlParameter("@Parm1", dtTable1); 
SqlParameter param2 = new SqlParameter("@Parm2", dtTable2); 
SqlParameter param3 = new SqlParameter("@Parm3", dtTable3); 
SqlParameter param4 = new SqlParameter("@Parm4", dtTable4); 
SqlParameter param5 = new SqlParameter("@Parm5", dtTable5); 

param1.SqlDbType = SqlDbType.Structured; 
param2.SqlDbType = SqlDbType.Structured; 
param3.SqlDbType = SqlDbType.Structured; 
param4.SqlDbType = SqlDbType.Structured; 
param5.SqlDbType = SqlDbType.Structured; 

SqlParameter[] parms = new SqlParameter[5]; 
parms[0] = param1; 
parms[1] = param2; 
parms[2] = param3; 
parms[3] = param4; 
parms[4] = param5; 

returnVal = SqlHelper.ExecuteScalar(CfgKeys.ConnString, CommandType.StoredProcedure, "TestProc", parms); 

今日は、SqlClientではなく、Microsoft.ApplicationBlocksを使用してみましたが、私はまだ同じエラーを得ました。

SqlConnection conn = new System.Data.SqlClient.SqlConnection(CfgKeys.ConnString); 
conn.Open(); 
using (conn) { 
    SqlCommand cmdTestDataToServer= new SqlCommand("TestProc", conn); 
    cmdTestDataToServer.CommandType = CommandType.StoredProcedure; 

    SqlParameter param1 = new SqlParameter("@Parm1", dtTable1); 
    SqlParameter param2 = new SqlParameter("@Parm2", dtTable2); 
    SqlParameter param3 = new SqlParameter("@Parm3", dtTable3); 
    SqlParameter param4 = new SqlParameter("@Parm4", dtTable4); 
    SqlParameter param5 = new SqlParameter("@Parm5", dtTable5); 

    param1.SqlDbType = SqlDbType.Structured; 
    param2.SqlDbType = SqlDbType.Structured; 
    param3.SqlDbType = SqlDbType.Structured; 
    param4.SqlDbType = SqlDbType.Structured; 
    param5.SqlDbType = SqlDbType.Structured; 

    cmdTestDataToServer.Parameters.Add(param1); 
    cmdTestDataToServer.Parameters.Add(param2); 
    cmdTestDataToServer.Parameters.Add(param3); 
    cmdTestDataToServer.Parameters.Add(param4); 
    cmdTestDataToServer.Parameters.Add(param5); 

    returnVal = cmdTestDataToServer.ExecuteScalar(); 
} 

conn.Close(); 

これを実行すると、すべてのパラメータが@ Param1に渡されているように見えます。したがって、前述のエラーです。手動でTSQLのプロシージャを実行すると動作しますので、エラーが発生します。誰かが私が間違っていた場所にスポットできますか?

TIA!

答えて

1

問題を発見しました。DataTableデータがWebサービスを介して送信されるため、DataSetメソッドGetXmlを使用していたことを忘れてしまいました。問題は、GetXmlメソッドにNULL列、つまり欠落している列が含まれていないことでした。

ありがとうございました!

+1

よろしくお願いいたします。 – kahoon

関連する問題