Параметр Dapper Tableued Value OleDB возвращает неопределенную ошибку

Я прочитал ваш ответ об использовании TVP в Dapper, я также реализовал ваше решение, но когда я выполняю код, Dapper возвращает мне сообщение "Unspecified Error". Я рассмотрел все вовлеченные компоненты:

  1. TVP в SQL Server
  2. Структура данных в коде позади такая же, как TVP
  3. При выполнении Stored Proc нет ошибки

Вот пример кода для Dapper, надеюсь, он поможет в анализе моей проблемы;

return _oledbconn.Query<int>(@"exec tvpdapper_sample ?", new { 
otstatus = _dtTVP.AsTableValuedParameter() 
}).SingleOrDefault();

1 ответ

Решение

Вы не указываете, что это за бэкэнд. Если бэкэнд это SQL Server, честно говоря: использовать SqlConnection, Если бэкэнд - это что-то еще, он может работать, а может и не работать. Поставщики ADO.NET в целом не обязаны или не должны поддерживать табличные параметры.

Обратите внимание, что в данный момент ваш код не вызывает хранимую процедуру. По крайней мере, не напрямую. Скорее: он запускает текстовую команду, которая вызывает хранимую процедуру. Это важно, потому что пользовательский тип данных неявен для хранимых процедур, но должен быть явным для текста. И с OLEDB: нет никакого способа сделать это явным! Таким образом, вы можете обнаружить, что это работает, если ваш сервер и провайдер поддерживают TVP:

return _oledbconn.Query<int>(@"tvpdapper_sample", new { 
    otstatus = _dtTVP.AsTableValuedParameter() 
}, commandType: CommandType.StoredProcedure).SingleOrDefault();
Другие вопросы по тегам