Pass-Tabelle mit dem Wert der Parameter an die gespeicherte Prozedur mit PetaPoco

Während ich versuche zu rufen, SQL Server 2008 R2 gespeicherte Prozedur mit PetaPoco.

Meine gespeicherten Prozedur akzeptiert eine table valued Parameters.

Wie kann ich rufen Sie die gespeicherte Prozedur in petapoco mit Tabelle Wert param?

Hier, was ich versuche zu tun:

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

Dieser code gibt mir eine Ausnahme :

Der eingehende tabular data stream (TDS) remote procedure call (RPC) Protokollablauf falsch ist.

Parameter 3 ("@0"): Daten-Typ 0x62 (sql_variant) hat eine ungültige Art für Typ-spezifische Metadaten.

Wenn ich parametar ty Wert

param.SqlDbType = SqlDbType.Structured;

Dann bekomme ich die exception wie

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

Wenn ich definiere meine param-wie

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

Dann bekomme ich die exception

Spalte, parameter oder variable @0. : Cannot find-Datentyp Strukturiert.

Wie kann ich definieren SqlParam mit table valued Parameter, so kann ich senden Sie es whit Daten auf SQL Server?

Lösung:

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
  • Ich kann zwar nicht sagen, die oben nicht funktioniert. Ich konnte nicht einen benannten parameter arbeiten in meiner Lösung. Ich landete gerade dabei ein @0 statt. db.Query<Es>("INNER JOIN @0 rowIds AUF ...", param).ToList()
InformationsquelleAutor adopilot | 2013-06-10
Schreibe einen Kommentar