zoukankan      html  css  js  c++  java
  • 未指定的错误: E_FAIL(0x80004005)

    遇到问题:未指定的错误: E_FAIL(0x80004005)

    测试时,使用了2台服务器,除了操作系统分别是Win2kServer,Win2003中小企业版外,其他安装的软件都相同,主要安装了
    Oracle9iClient,.Net Framework1.1+sp1
    数据库在单独的服务器:Linux9+Oracle9.2.0

     
    遇到错误
    -2147467259
    System.Data.OleDb.OleDbErrorCollection
    未指定的错误: E_FAIL(0x80004005)
    环境win2000+sp4+framework1.1+sp1+Oracle9i Client,
    Linux9+Oracle 9.2.0

    可以使用tnsping 服务名,ping 通Oracle
    使用OleDbConnection,建立WinForm程序可以访问Oracle,
    但是用相同连接字符,使用OleDbConnection建立的Asp.Net 程序无法访问数据库,
    当OleDbConnection.Open() 时,遇到上面的错误,
    开始认为是Oracle目录bin的权限的问题,但是如果是权限问题,应该提示

    09:35:59 -2147467259
    09:35:59 System.Data.OleDb.OleDbErrorCollection
    09:35:59 未找到 Oracle 客户端和网络组件。这些组件是由 Oracle 公司提供的,是 Oracle 8i 版 (或更高) 客户软件安装的一部分。
    这个以前遇到过,设置权限即可以解决,所以不该是这个原因。

    但是根据以上分析,Winform可以访问,Asp.net不可以,应该同权限有关,哪位有解决办法,请告知,谢谢

    如果使用System.Data.OracleClient命名空间下的OracleConnection,
    Open()时会出现错误:
    Could not create an environment: OCIEnvCreate returned -1.
    at System.Data.OracleClient.DBObjectPool.GetObject(Object owningObject, Boolean& isInTransaction) at System.Data.OracleClient.OracleConnectionPoolManager.GetPooledConnection(String encryptedConnectionString, OracleConnectionString options, OracleConnection owningObject, Boolean& isInTransaction) at System.Data.OracleClient.OracleConnection.OpenInternal(OracleConnectionString parsedConnectionString, Object transact) at System.Data.OracleClient.OracleConnection.Open() at WebTest.WebForm1.Button1_Click(Object sender, EventArgs e) in d:\asp.net\webtest\webform1.aspx.cs:line 56

    如果使用Oracle 提供的for .Net 驱动,提示错误:
    ORA-604: error occurred at recursive SQL level %s
    at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure) at Oracle.DataAccess.Client.OracleConnection.Open() at WebTest.WebForm1.Button1_Click(Object sender, EventArgs e) in d:\asp.net\webtest\webform1.aspx.cs:line 57

    登录到数据库服务器,察看network/admin/下的tnsnames.ora文件,同以往配置的Oracle比,多了域名,
    ORADATA.LOCALDOMAIN =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = oradata)
        )
      )
    有无域名,经过测试,同这个问题没有关系,也不影响数据库启动及使用。
    应该是在设置Ora92/bin目录的权限时,某个设置生效解决了问题。
    奇怪的问题,来时不明,去时不白。

    在另一台Win2003 Server上测试,不论怎样设置Oracle/bin的权限,都是抱错误,“发生错误:发生了一个 Oracle 错误,但无法从 Oracle 中检索错误信息”,重新写的Asp.Net 页面访问Oracle没有问题,察看差别,
    在连接字符串中,虽然都是使用OleDbConnection,但是连接字符不同,
    分别是:
    Provider=MSDAORA.1;
    改为
    Provider=OraOLEDB.Oracle.1;
    则不会报错,奇怪啊。
    要知道,使用第一个字符串在Win2K的机器上是没有问题的。

  • 相关阅读:
    leetcode之String to Integer (atoi)
    初次思考
    leetcode之Reverse Words in a String
    Leetcode之Database篇
    在项目中添加类
    创建项目
    配置Eclipse

    递归
    多态
  • 原文地址:https://www.cnblogs.com/mikalshao/p/1527032.html
Copyright © 2011-2022 走看看