日期:2014-05-17  浏览次数:20796 次

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为运行时客户电脑上安装的版本,可以检索注册表信息自动得到后修改此配置文件节点,保存后重启程序。