"Must declare the scalar variable @Idx" 当通过 OleDb 在 SQL 服务器上使用 Dapper 查询时

"Must declare the scalar variable @Idx" when using a Dapper query on SQL server via OleDb

当连接到 accdb 数据库时,此代码有效:

Dim customer = connection.Query(Of Klantgegevens)("Select Actief,Onderhoudscontract From Klantgegevens Where Klantnummer=@Idx", New With {.Idx = customerId}).SingleOrDefault

但是当连接到具有相同结构的 table 的 SQL 服务器数据库时,下面的代码给出了关于 Idx 参数的错误:

Dim customer = connection.Query(Of Klantgegevens)("Select Actief,Onderhoudscontract From [dbo.Klantgegevens] Where Klantnummer=@Idx", New With {.Idx = customerId}).SingleOrDefault

这里出了什么问题?我曾希望通过使用 Dapper 我能够编写与数据库无关的代码。但好像不是这样的!

如果您使用的是 ODBC/OLEDB 连接,那么我的第一个建议是:移动到 SqlClient (SqlConnection)。 SqlConnection.

一切正常

如果您出于某种原因无法做到这一点 - 即您被无法很好地支持命名参数的提供程序所困扰 - 那么您可能需要告诉 dapper 使用伪位置参数。使用 ?Idx? 而不是 @Idx。 Dapper 将此解释为使用成员 Idx 中的值将 ?Idx? 替换为 positional 占位符(简单地说:?)的指令。 =19=]

这也是与 accdb 对话的一个很好的解决方案,accdb 对 ADO.NET 提供程序具有 非常 非典型参数用法:它允许命名参数标记,但所有标记全部替换为 ?,并从添加的参数 的位置给定值 (不是通过它们的名称)。