c# - 适用于 SQL 数据库的 SQL 语句不适用于 Access 数据库

标签 c# sql ms-access select syntax-error

我正在用 C# 创建一个 GUI,我有以下代码行来获取从 lowerPageBound 到 upperPageBound 的元素。

command.CommandText = "Select Top " + rowsPerPage + " " +
        CommaSeparatedListOfColumnNames + " From " + tableName +
        " WHERE " + columnToSortBy + " NOT IN (SELECT TOP " +
        lowerPageBoundary + " " + columnToSortBy + " From " +
        tableName + " Order By " + columnToSortBy +
        ") Order By " + columnToSortBy;
adapter.SelectCommand = command;
DataTable table = new DataTable();
table.Locale = System.Globalization.CultureInfo.InvariantCulture;
adapter.Fill(table);

生成的 SQL 语句在 access 数据库上使用时给我一个错误(adapter.Fill(table) 被执行),但在 sql 数据库上工作正常。

这是生成的 SQL:

Select Top 25 [ID], [Business Process], [Tier Level], [Application], [CI ID], [Server], [Server Function], [Data Center], [HA], [DR Equip], [Procedure], [Procedure Tested], [Type], [Outcome], [Overall Status] From Data WHERE ID NOT IN (SELECT TOP 0 ID FROM Data ORDER BY ID) ORDER BY ID;

我收到的错误:

Syntax error in query expression 'ID NOT IN (SELECT TOP 0 ID FROM Data ORDER BY ID)'.

我花了好几个小时试图解决这个问题,但一直没有成功。为什么相同的语句不能在 Access 数据库上工作是没有意义的。感谢您的帮助!!

最佳答案

Access 数据库引擎将针对您的这部分查询抛出错误。

SELECT TOP 0 ID FROM Data ORDER BY ID

您可以拆分该部分并将其作为新的 Access 查询进行测试。不幸的是,错误消息不是很有用:“SELECT 语句包含一个保留字或一个拼写错误或丢失的参数名称,或者标点符号不正确。”这是一种通用错误消息当无法准确描述问题时,数据库引擎会为您提供帮助。

基本上,这一切都归结为您不能在 Access SQL 中执行 SELECT TOP 0 的事实。

此外,一旦您解决了关于 SELECT TOP 0 的问题,您就需要在外部查询中使用一个 ORDER BY 子句。如果没有 ORDER BYTOP 25 返回的行是任意的。

关于c# - 适用于 SQL 数据库的 SQL 语句不适用于 Access 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675371/

相关文章:

c# - ASP.NET Core 2.0 ngrok 502 网关错误

c# - 为什么 toString() 会导致我的字符串丢失小数位?

c# - 从 .net 中的两个字符串数组中删除公共(public)字符串

c# - 如何读取命名空间 c# LINQ to XML

c# - 将数据从 DataTable 传输到 Access 数据库时出现 Insert INTO 错误

MySQL 将产品与类别树连接起来,即使类别为空

sql - 为什么 SQL Server 不能更改存储过程中的 View ?

mysql - 用于选择具有多个到主键表的链接的外键行的 SQL 查询

c# - 从 MS Access 转换 OLE 图像对象以在 .NET 中使用

java - 字符串日期转换为sql日期格式MM/dd/yyyy?