是什么导致我的oledbeexception, IErrorInfo.GetDescription failed wit



我使用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]。你不需要在表格周围加上括号

相关内容

  • 没有找到相关文章

最新更新