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 타이 값을 설정하면

내가 얻을 예외 같은

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. : 데이터 형식 Structured를 찾을 수 없습니다.

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

관련 문제