Параметр Dapper Tableued Value OleDB возвращает неопределенную ошибку
Я прочитал ваш ответ об использовании TVP в Dapper, я также реализовал ваше решение, но когда я выполняю код, Dapper возвращает мне сообщение "Unspecified Error". Я рассмотрел все вовлеченные компоненты:
- TVP в SQL Server
- Структура данных в коде позади такая же, как TVP
- При выполнении 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();