C#连接oracle数据库时出错
使用oracle提供的连接库Oracle.DataAccess.dll,在创建连接对象时就错了,还没有执行SQL语句。这是怎么回事,同学跟我使用的一个库,他就没出现这个问题。无法创建对象没法继续下去了
------解决方案--------------------看下你Oracle的安装路径中,是否包含括号,曾经有括号引发错误的BUG。
------解决方案--------------------没装oracle的机器上不能使用Oracle.DataAccess.dll
至少要装ORACLE的客户端
------解决方案--------------------http://blog.csdn.net/vbloveshllm/article/details/8202477
------解决方案--------------------使用的Oracle.DataAccess.dll必须是安装的Oracle程序里面的,而不能从其它地方复制,那样是无效的,至于版本号的问题,可以配置运行时版本兼容,再或者统一安装Oracle客户端,保证版本一致。
所以对于使用Oracle的.NET程序,最好不要直连数据库,直接一台服务器提供数据库接口访问服务,例如用WCF来实现。那样再麻烦的配置都只有一次,不需要配置所有客户端。
------解决方案--------------------Oracle的64位和32位版本是不同步的,为什么我不知道,Oracle公司也就这个是做得最不人性化的了。
要解决版本问题,可以在程序里强制设置编译版本为x86,即使在64位电脑上,也使用32位的Oracle客户端,那样就肯定能同步版本,不然就做个版本检测程序,首次运行时自动到系统注册表搜索安装的Oracle版本号,然后修改配置文件后重新开启程序,配置文件修改如下:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Oracle.DataAccess"
publicKeyToken="89B483F429C47342"
culture="neutral" />
<bindingRedirect
oldVersion="2.112.2.0"
newVersion="2.112.1.0"/>
</dependentAssembly>
</assemblyBinding>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
注意红色部分,oldVersion为你程序编译时使用的Oracle版本,而newVersion为运行时客户电脑上安装的版本,可以检索注册表信息自动得到后修改此配置文件节点,保存后重启程序。