Dapper 表值参数 OleDB 返回未指定的错误

本文关键字:未指定 错误 返回 OleDB 值参 参数 Dapper | 更新日期: 2023-09-27 18:33:14

我已经阅读了您关于在 Dapper 中使用 TVP 的答案,我也实现了您的解决方案,但是当我执行代码时,Dapper 向我返回了一条"未指定的错误"消息。我已经审查了所有涉及的组件:

  1. SQL Server 中的 TVP
  2. 代码隐藏中的数据表结构与 TVP 相同
  3. 执行存储过程没有错误

这是 Dapper 的示例代码,希望它有助于分析我的问题;

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

Dapper 表值参数 OleDB 返回未指定的错误

您在此处没有指出后端是什么。如果后端是SQL Server,坦率地说:使用SqlConnection。如果后端是其他东西,它可能会也可能不会工作。通常,ADO.NET 提供程序不需要或期望支持表值参数。

请注意,目前代码未调用存储过程。至少,不是直接的。相反:它正在运行调用存储过程的文本命令。这一点很重要,因为自定义数据类型对于存储过程是隐式的,但对于文本必须是显式的。而对于 OLEDB:没有办法让它明确!因此,如果您的后端和提供商都支持 TVP,您可能会发现这有效:

return _oledbconn.Query<int>(@"tvpdapper_sample", new { 
    otstatus = _dtTVP.AsTableValuedParameter() 
}, commandType: CommandType.StoredProcedure).SingleOrDefault();