客户端程序报错:“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常

oract666 2009-10-23 05:10:54
开发机上是10g客户端,VS2008,程序时普通的 windows 窗口程序

部署在一台安装了9i客户端的PC机上。连接数据库就报这个错误

我在制作部署包的时候其实是包含了 Oracle.DataAccess.dll 文件的,难道不会加载这个dll吗?
...全文
7073 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyrivercn 2010-06-22
  • 打赏
  • 举报
回复
把 OraOps10.dll或OraOps10w.dll 拷到跟 oracle.dataaccess.dll同一目录下
oract666 2009-10-31
  • 打赏
  • 举报
回复
没人回答吗?
oract666 2009-10-29
  • 打赏
  • 举报
回复
警告 1 引用程序集“D:\oracle\product\11.1.0\client_1\ODP.NET\bin\2.x\Oracle.DataAccess.dll”面向的是另一个处理器,而不是应用程序。


是不是和这个警报有关??
oract666 2009-10-29
  • 打赏
  • 举报
回复
那有没有办法使得我的程序集里面能够包含所需的全部dll?

说到底我不想让用户去安装一堆的软件
oract666 2009-10-28
  • 打赏
  • 举报
回复
我的连接字符串如下所示:

String oradb = "data source=//10.1.1.22:1521/db;user id=cc;password=cc";
OracleConnection db_conn = new OracleConnection(oradb);

没有采用tnsname,而是直接写的IP和端口以及服务名
正在加载昵称 2009-10-28
  • 打赏
  • 举报
回复
连接字符串问题
oract666 2009-10-28
  • 打赏
  • 举报
回复
我现在真正关心的是程序集中包含dll了为什么还要安装客户端?

用 .NET 自身的库自然可以,但是我想搞清楚的是引用dll是如何被寻址的
cc_net 2009-10-28
  • 打赏
  • 举报
回复
客户端版本要匹配吧
Oracle.DataAccess.DLL 实际是通过客户端的oci.dll来和服务器通信的
Dobzhansky 2009-10-28
  • 打赏
  • 举报
回复
ODP.NET 除了 Oracle.DataAccess.DLL 之外, 还有一个 OraOps**.dll, 是不属于 oci 客户端的
9i 10g, 11g, 的不一样
xochenlin 2009-10-28
  • 打赏
  • 举报
回复
不是权限问题,(9i与10g)之间版本不符合的问题
xochenlin 2009-10-28
  • 打赏
  • 举报
回复
可能是权限问题吧
oract666 2009-10-28
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 qldsrx 的回复:]
你的连接字符串怎么那么写的,我从未见过在.NET里面见过那种写法可以通过的,除非11g支持了。如果是11g支持了,那你可能真得单独安装11g了。
[/Quote]


呵呵,这很正常啊,我一般都这么用
qldsrx 2009-10-28
  • 打赏
  • 举报
回复
你的连接字符串怎么那么写的,我从未见过在.NET里面见过那种写法可以通过的,除非11g支持了。如果是11g支持了,那你可能真得单独安装11g了。
lzsh0622 2009-10-25
  • 打赏
  • 举报
回复
建议楼主用12楼的方法,.net framework能解决的,不用第三方控件,用第三方控件维护成本太高.
qldsrx 2009-10-24
  • 打赏
  • 举报
回复
说实在的,我没有见过Oracle.DataAccess.DLL,不知道你哪里搞来的。

我连接Oracle都是用的System.Data.OracleClient.dll,那个是.net framework自带的,连接任何版本的Oracle客户端都没有问题。
qldsrx 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yaohuilee 的回复:]
这个问题一开始也有可能是遇到了Oracle9i的Bug,这种情况也比较常见。

所有后来统一换成 11g 之后,就没有问题了。

实际上,你只把生产环境换成10g的客户端,应该也能解决问题。
[/Quote]
这个说法比较说得通。
oract666 2009-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yaohuilee 的回复:]
这个问题一开始也有可能是遇到了Oracle9i的Bug,这种情况也比较常见。

所有后来统一换成 11g 之后,就没有问题了。

实际上,你只把生产环境换成10g的客户端,应该也能解决问题。
[/Quote]


我现在在一台10g客户端的机器上进行软件安装后还是包类似的错误,在11g客户端上就没有问题

我现在有两点不明白:

第一、为什么我程序集里面有Oracle.DataAccess.DLL 还需要安装客户端?
第二、为什么10g不行但是11g可以(这点我估计和注册表选项有关,11g里面自动包含ADO.NET的注册表项)
「已注销」 2009-10-23
  • 打赏
  • 举报
回复
这个问题一开始也有可能是遇到了Oracle9i的Bug,这种情况也比较常见。

所有后来统一换成 11g 之后,就没有问题了。

实际上,你只把生产环境换成10g的客户端,应该也能解决问题。
oract666 2009-10-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 qldsrx 的回复:]
引用 4 楼 oract666 的回复:
参照答案我把开发环境和生产环境全部换成Oracle 11g 客户端后就一切正常了。


但是我很奇怪,我的应用程序在部署的时候在应用程序目录是添加了 Oracle.DataAccess.dll 文件的,按道理说exe文件执行的时候就可以在其当前目录去动态调用 Oracle.DataAccess.dll ,但是为什么还要我去安装Oracle 客户端呢?

首先你要明确一点,只要是引用的dll文件,就一定不会被编译到exe文件中。所以如果不是.net framework自带的dll文件,必须要和exe文件一起复制过去才行。
[/Quote]


也就是说,复制过去之后理论上来说是不需要用户再去安装Oracle客户端的,对吗?
悔说话的哑巴 2009-10-23
  • 打赏
  • 举报
回复
这个你 要 先看看是不是版本的兼容行问题,按照 常理来 说DLL文件要 和EXE文件放在一起(客服端)
加载更多回复(6)

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧