13

我正在对 Access 数据库使用 OleDbConnection、OldDbCommand 和 OleDbReader。

我在从代码中调用的数据库中有一个命名查询。

从访问权限运行查询时,该查询可以正常工作。

一些资源表明错误可能是由于在查询中使用保留字并用括号括起来引起的。我没有使用任何保留字,并且无论如何都将所有列名括在括号中以排除它。

为了确定问题出在哪里,我将查询简化为一个简单的

SELECT id FROM table1 WHERE id = 5 

其中 Ole 连接不会引发异常。

当我介绍查询的下一部分时:

SELECT table1.id FROM table1 INNER JOIN storedQuery ON table1.id = storedQuery.id WHERE table1.id = 5" 

然后我得到了例外。

异常详情如下:

  • 消息:IErrorInfo.GetDescription 失败,出现 E_FAIL(0x80004005)。
  • 错误代码:-2147467259
  • 本机错误:-533136361
  • SQL 状态:3000
4

3 回答 3

13

当我说查询不包含任何保留字时,我显然弄错了。

我使用的查询是从 Access 数据库中的另一个查询中选择的。另一个查询有一个导致问题的保留关键字。

顺便提一句:

Access 数据库引擎以不同的模式运行,具体取决于它是从 Access、数据访问对象、Access 数据库引擎的 Microsoft OLE 提供程序还是 Microsoft Access ODBC 驱动程序调用的。它可以在 ANSI 模式或非 ANSI(传统)模式下运行。

因为使用这两种模式会导致两组略有不同的保留字,所以使用保留字的查询可能在一种模式下工作而在另一种模式下失败

Access 2007 保留字和符号

基思

于 2013-03-25T13:50:03.323 回答
8

..并且无论如何都将所有名括在括号中以排除它。

不仅应该用方括号括起来的列名表名也应该例如,替换下面的行

SELECT id FROM table1 WHERE id = 5

用下面的线

SELECT [id] FROM [table1] WHERE [id] = 5
于 2015-12-31T03:22:52.963 回答
4

此异常的另一个可能原因是您尝试加载/读取的文件不存在。

我发现在尝试打开文件之前执行“File.Exists”很有用,只是为了确保我的代码正确检测到“IErrorInfo.GetDescription failed with E_FAIL”异常的特定原因。

于 2013-09-30T14:03:23.153 回答