遇到问题:未指定的错误: 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的机器上是没有问题的。