Podczas gdy próbuję wywołać procedurę przechowywaną SQL Server 2008 R2 przy użyciu PetaPoco.Przekaż wartość parametru tabeli do procedury przechowywanej przy użyciu PetaPoco
Moja procedura przechowywana przyjmuje parametr o wartości w tabeli.
Jak mogę wywołać procedurę przechowywaną w petapoco z parametrem wartości tabeli?
Oto co próbuję zrobić:
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);
Ten kod daje mi wyjątek:
Strumień przychodzących danych tabelarycznych (TDS) zdalnego wywoływania procedur (RPC) strumień protokołu jest niepoprawna .
Parametr 3 ("@ 0"): Typ danych 0x62 (sql_variant) ma nieprawidłowy typ dla metadanych specyficznych dla typu.
Jeżeli ustawić parametar wartość TY
param.SqlDbType = SqlDbType.Structured;
Potem dostać wyjątek jak
The table type parameter '@0' must have a valid type name.
Kiedy definiować moje param jak
param.SqlDbType = SqlDbType.Structured;
param.SqlValue = table;
param.ParameterName = "@art_id";
param.TypeName = SqlDbType.Structured.ToString();
Potem dostać wyjątek
Kolumna, parametr lub zmienna @ 0. : Nie można znaleźć typu danych Strukturalnych.
Jak mogę zdefiniować SqlParam
z wartością ustaloną w tabeli, aby móc wysłać dane do SQL Server?
Rozwiązanie:
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
Zrobiłem to i teraz mam inny wyjątek – adopilot
Przeszedłem przez, Thanx przy pomocy Zobacz moje edycje proszę – adopilot