【问题标题】:LINQ to SQL Server 2000: "Must declare variable '@p0'"LINQ to SQL Server 2000:“必须声明变量 '@p0'”
【发布时间】: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


【解决方案1】:

事实证明,SQL 客户端提供程序确实适用于 SQL Server 2000。只是不适用于 Visual Studio 2010。我更改了提供程序,现在查询可以工作了。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多