Передайте значение таблицы в хранимую процедуру с помощью PetaPoco

Пока я пытаюсь вызвать хранимую процедуру SQL Server 2008 R2 с помощью PetaPoco.

Моя хранимая процедура принимает параметр с табличным значением.

Как я могу вызвать хранимую процедуру в 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);

Этот код дает мне исключение:

Неверный поток протокола RPC для входящего потока табличных данных (TDS).
Параметр 3 ("@ 0"): тип данных 0x62 (sql_variant) имеет недопустимый тип для метаданных для конкретного типа.

Если я установлю значение параметра

param.SqlDbType = SqlDbType.Structured;

Тогда я получаю исключение, как

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. : Не удается найти тип данных структурированный.

Как я могу определитьSqlParam с табличным параметром, чтобы я мог отправить его данные в 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

Ответы на вопрос(1)

Ваш ответ на вопрос