LINQ到SQL Server 2000:“;必须声明变量'@p0'&引用;

LINQ到SQL Server 2000:“;必须声明变量'@p0'&引用;,linq,sql-server-2000,Linq,Sql Server 2000,我创建了这个简单的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][Mic

我创建了这个简单的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驱动程序][SQL Server]必须声明变量'@p0'

(b)

必须声明变量'@p0'

我记得读到OleDb和ADO.NET不支持SQL Server 2000上的命名参数。这个问题与那个问题有关,还是我做错了什么

更新1:

这似乎确实是提供商的问题。我使用SQL客户机数据提供程序对SQL Server 2008进行了相同的查询,结果很好。遗憾的是,此提供程序不适用于SQL Server 2000

当我尝试在SQLServer2008中使用ODBC和OLEDB提供程序时,我遇到了相同的错误

有人知道合适的解决方法吗

更新2:


事实证明,SQL客户机提供程序确实与SQL Server 2000配合使用。只是不是在VisualStudio2010中。我更改了提供程序,查询现在可以工作。

结果表明,SQL客户端提供程序确实可以与SQL Server 2000一起工作。只是不是在VisualStudio2010中。我更改了提供程序,查询现在可以工作。

结果表明,SQL客户端提供程序确实可以与SQL Server 2000一起工作。只是不是在VisualStudio2010中。我更改了提供程序,查询现在可以工作。

如果您使用的是ODBC提供程序,它将无法工作。更改为SqlClient。

如果您使用的是ODBC提供程序,它将无法工作。更改为SqlClient。

当您说“通过运行”时,您是指执行实际查询,还是通过探查器尝试生成的SQL?您是在使用Linq to SQL还是实体框架?@JonSkeet我在执行实际查询(“虽然”不是“通过”)。我粘贴的SQL是探查器中显示的内容,也是我尝试评估结果时的调试器。当你说“运行它”时,你是指执行实际查询,还是通过探查器尝试生成的SQL?你是在使用Linq to SQL还是实体框架?@JonSkeet我在执行实际查询(“虽然”不是“通过”)。我粘贴的SQL是探查器中显示的SQL,以及我尝试评估结果时的调试器。