【发布时间】:2012-04-04 17:41:06
【问题描述】:
我创建了这个简单的 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)
ERROR [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 中不行。我更改了提供程序,现在查询可以工作了。
【问题讨论】:
-
当你说“运行它”时——你的意思是执行实际的查询,或者通过探查器尝试生成的 SQL?
-
您使用的是 Linq to Sql 还是 Entity Framework?
-
@JonSkeet 我正在执行实际的查询(“虽然”不是“通过”)。当我尝试评估结果时,我粘贴的 SQL 会显示在分析器和调试器中。
标签: linq sql-server-2000