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

49 views
Skip to first unread message

Pierce

unread,
Mar 21, 2006, 9:39:47 AM3/21/06
to PierceBBS
遇到错误
-2147467259
System.Data.OleDb.OleDbErrorCollection
未指定的错误: E_FAIL(0x80004005)
环境win2000+sp4+framework1.1+sp1,
Linux9+Oracle 9.2.0

可以使用tnsping 服务名,ping 通数据库。
使用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

为了防止权限问题,oracle92/bin的权限,重新设置了,并赋给了Authen
users,aspnet,Iusr_xxx,设置好权限,重起了计算机,都没有效果。

登录到数据库服务器,察看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)
)
)
就把域名删除了,再次测试,当时还是有问题,过了一会,奇迹出现了,正常运行了,没有报错。
奇怪的问题,来时不明,去时不白。

Pierce

unread,
Mar 22, 2006, 12:54:36 AM3/22/06
to PierceBBS
有无域名,经过测试,同这个问题没有关系,也不影响数据库启动及使用。

应该是在设置Ora92/bin目录的权限时,某个设置生效解决了问题。
奇怪的问题,来时不明,去时不白。

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

Reply all
Reply to author
Forward
0 new messages