8

PetaPocoを使用してSQL Server 2008 R2ストアドプロシージャをコールしようとしています。PetaPocoを使用してストアドプロシージャにテーブル値のパラメータを渡します。

私のストアドプロシージャは、テーブル値のパラメータを受け取ります。

私はテーブル値paramでpetapocoのストアドプロシージャを呼び出すことができますか?

私がやろうとしています何をここで

var db = new PetaPoco.Database("repikaciskaBaza"); 

DataTable table = new DataTable(); 
DataColumn id = table.Columns.Add("id", type: typeof(Int32)); 

for (int i = 0; i < 10;i++) 
{ 
    DataRow row = table.NewRow(); 
    row["id"] = i; 
    table.Rows.Add(row); 
} 

var param = new SqlParameter(); 
param.DbType = DbType.Object; 
param.ParameterName = "@art_id"; 

param.SqlValue = table; 

var lista = db.Query<pocoArts>(";exec dbo.test_sporc_param @0", param); 

このコードは私を与える例外:

着信の表形式のデータストリーム(TDS)リモートプロシージャコール(RPC)プロトコルストリームが正しくありません。
パラメータ3( "@ 0"):データ型0x62(sql_variant)には、型固有のメタデータに無効な型があります。私は

param.SqlDbType = SqlDbType.Structured; 

その後parametarのTY値を設定した場合

私が手例外のような

The table type parameter '@0' must have a valid type name. 

私は

  param.SqlDbType = SqlDbType.Structured; 
      param.SqlValue = table; 
      param.ParameterName = "@art_id"; 
      param.TypeName = SqlDbType.Structured.ToString(); 

のように私のparamはその後、私は例外を取得定義

カラム、パラメータ、または変数@ 0。 :データ型が見つかりません。構造化されています。

SqlParamをテーブル値のparamで定義すると、SQL Serverにデータを送信できますか?

ソリューション

var param = new SqlParameter(); 
param.SqlDbType = SqlDbType.Structured; // According to marc_s 
param.SqlValue = table; 
param.ParameterName = "@art_id"; 
param.TypeName = "dbo.typ_art_id"; // this is TYP from SQL Server database it needs to be equal to type defined in SQL Server not type of param 

答えて

4

relevant MSDN documentation on table-valued parameterによると、あなたが使用する必要があります。

var param = new SqlParameter(); 
param.SqlDbType = SqlDbType.Structured; 

SqlDbType.Structuredは、このための鍵です。 DbType.Objectは使用しないでください。

+0

私はそれをしましたが、今では別の例外を持っています – adopilot

+0

私は渡されましたThanx on help、私の編集をご覧ください – adopilot

関連する問題