• 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属于保留字,对该字段改名后,运行正常。

  • 相关阅读:
    nginx优化——包括https、keepalive等
    Kubernetes+Prometheus+Grafana部署笔记
    常见的页面调度算法
    算法-求二进制数中1的个数
    C++ 关联容器详解——从内部结构到应用
    C++ 容器及选用总结
    C++ STL中迭代器失效的问题
    二维数组和指针
    Linux软连接和硬链接
    what is the virtual machine, when and why we need use it ?
  • 原文地址:https://www.cnblogs.com/bjguanmu/p/15107580.html
Copyright © 2020-2023  润新知