ADO.NET访问Access2007的数据库 IErrorInfo.GetDescription failed with E_FAIL(0x80004005)

 

使用ADO.NET访问Access2007的数据库,执行SQL语句:

select xxid, username, department, Ipadr, mailbox, telephone mobilephone, company, position, Job, job content, uid, px from info where department=‘武功‘ order by px

出现如下错误:

System.Data.OleDb.OleDbExcetion (0x80004005):IErrorInfo.GetDescription failed with E_FAIL(0x80004005)

网络搜索到信息:https://www.it1352.com/1643113.html

====================================================

我正在对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
  • NativeError:-533136361
  • SQLState:3000
解决方案

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

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

顺便说一句:

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

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

Access 2007保留字和符号

====================================================

对sql语句中的每个标识符进行搜索,发现position属于保留字,对该字段改名后,运行正常。

 

ADO.NET访问Access2007的数据库 IErrorInfo.GetDescription failed with E_FAIL(0x80004005)

上一篇:Mysql5.7 绿色版安装


下一篇:MySQL5.7 以后 GROUP BY 报错的 2 种解决方案