我使用OleDbConnection, OldDbCommand和OleDbReader对Access数据库。
我在数据库中有一个命名的查询,我从代码调用。
当从access运行查询时,查询工作正常。
一些资源指出,错误可能是由于在查询中使用保留词并将它们用括号括起来造成的。我没有使用任何保留字,并且已经将所有列名包装在括号中以排除这种情况。
试图确定问题在哪里,我已将查询简化为一个简单的
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 failed with E_FAIL(0x80004005).
- 错误代码:-2147467259
- NativeError: -533136361
- SQLState: 3000
当我说查询不包含任何保留词时,显然我错了。
我使用的查询是从Access数据库中的另一个查询中进行选择。另一个查询有一个导致问题的保留关键字。
顺便说一句:
基斯Access数据库引擎以不同的模式运行,这取决于它是从Access、数据访问对象、Access数据库引擎的Microsoft OLE Provider还是Microsoft Access ODBC驱动程序调用的。它可以在ANSI模式或非ANSI(传统)模式下运行。
因为使用这两种模式会产生两组略有不同的保留词,所以使用保留词的查询可能在一种模式下有效,而在另一种模式下失败
Access 2007保留字和符号
. .并且已经将所有列名称包装在括号中以排除它。
不仅列名应该用方括号括起来表名也应该如此例如,替换下面的
行SELECT id FROM table1 WHERE id = 5
与下面的行
SELECT [id] FROM [table1] WHERE [id] = 5
另一个可能导致此异常的原因是您试图加载/读取的文件不存在。
我发现执行"文件"很有用。"存在",然后再尝试打开文件,以确保我的代码检测到"IErrorInfo. exe"的特定原因。GetDescription failed with E_FAIL" exception .
我的问题是这个实例域中的保留字。有这么多保留字,调试起来很困难。我的解决方案是在visual studio中使用"数据源"。然后构建一个查询,它自动检测保留词并将[]放在它周围,使它看起来像Orders.[Domain]。你不需要在表格周围加上括号