我创建了这个简单的 LINQ 查询:
var result = from invoice in invoiceTable
where invoice.Id == 1
select invoice.Document;
它生成以下 SQL:
SELECT [t0].[Document]
FROM [Invoice] AS [t0]
WHERE [t0].[Id] = @p0
每当我运行它时,都会收到此错误:
(ODBC)
错误 [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]必须声明变量“@p0”。
(OleDb)
必须声明变量“@p0”。
我记得读过 OleDb 和 ADO.NET 不支持 SQL Server 2000 上的命名参数。这个问题与那个问题有关,还是我做错了什么?
更新 1:
这似乎是一个供应商问题。我使用 SQL 客户端数据提供程序对 SQL Server 2008 尝试了相同的查询,它运行良好。不幸的是,此提供程序不适用于 SQL Server 2000。
当我尝试在 SQL Server 2008 中使用 ODBC 和 OLEDB 提供程序时,我遇到了同样的错误。
有谁知道合适的解决方法?
更新 2:
事实证明,SQL 客户端提供程序确实适用于 SQL Server 2000。只是不是来自 Visual Studio 2010。我更改了提供程序,查询现在可以工作了。