8

का उपयोग करके संग्रहीत प्रक्रिया के लिए पास तालिका मान param को पास करें, जबकि मैं PetaPoco का उपयोग कर SQL Server 2008 R2 संग्रहीत प्रक्रिया को कॉल करने का प्रयास कर रहा हूं।पेटापोको

मेरी संग्रहीत प्रक्रिया तालिका मूल्यवान पैरामीटर स्वीकार करती है।

मैं तालिका मूल्य पैरामीटर के साथ पेटापोको में संग्रहीत प्रक्रिया को कैसे कॉल कर सकता हूं?

यहाँ मैं क्या करने की कोशिश कर रहा हूँ:

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); 

इस कोड को मुझे एक अपवाद देता है:

भेजे तालिका डेटा स्ट्रीम (टीडीएस) दूरस्थ प्रक्रिया कॉल (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(); 

मेरे परम तब मैं अपवाद को परिभाषित

कॉलम, पैरामीटर, या चर @ 0। : संरचित डेटा प्रकार नहीं मिल सकता है।

मैं तालिका मूल्यवान param के साथ SqlParam को कैसे परिभाषित कर सकता हूं ताकि मैं इसे SQL सर्वर पर श्वेत डेटा भेज सकूं?

समाधान:

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 कृपया मेरे संपादन देखें – adopilot

संबंधित मुद्दे