oracle odp.net 32位/64位版本的问题

如果你的机器上安装了odp.net,且确信machine.config也有类似以下结节:(64位+.net 4.0环境下,machine.config可能会有4份,分别对应于.net2.0/4.0的32/64位版本,要每个都检查过去哦)
 <DbProviderFactories>
      <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=2.111.7.20, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>
4.0的machine.config中类似下面这样:
<DbProviderFactories>
      <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET" type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
         </DbProviderFactories>
如果碰巧您又在用64位的操作系统(比如win2008 r2),开发工具又是最先进的vs.net 2010 sp1,但是死活在代码就是连接不上oracle,一直报一些奇怪的错误:比如“Data Provider找不到”啦,“Oracle.DataAccess.Client无法加载”啦之类,正在一筹莫展大声咆哮:“天理,有木有啊,有木有!”之时,恭喜你,多半是遇到了x64/x64的版本问题。(我今天花了近一上午的时间才弄明白问题所在)
odp.net安装后,默认会在GAC中部署程序集Oracle.DataAccess,如果你安装的是x86版本,GAC中的就是x86;如果你安装的x64版本,GAC中的就是AMD64版本。 
检测本机GAC中是否有Oracle.DataAccess程序集并查看版本的方法如下:
在vs.net命名行窗口下,输入 gacutil.exe /l Oracle.DataAccess
如果看到类似下面的结果:
D:\app\x86\Microsoft Visual Studio 10.0\VC>gacutil.exe /l Oracle.DataAccess
Microsoft (R) .NET Global Assembly Cache Utility.  Version 4.0.30319.1
Copyright (c) Microsoft Corporation.  All rights reserved.
The Global Assembly Cache contains the following assemblies:
  Oracle.DataAccess, Version= 2.112.2.0 , Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=2.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
  Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64
  Oracle.DataAccess, Version=4.112.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86
Number of items = 4

表明你的机器上安装了4个版本的Oracle.DataAccess,分别对应于.net 2.0以及.net 4.0的32位/64位版本
而且在C:\Windows\assembly 目录下也能看到x86与AMD64位
2011041913224494.png
注:在资源管理器里,只能看到2.112.2.0的x86/AMD64版本,看不到4.112.2.0版本的任何东东(不知道是不是我的个别现象,也有可能另外的版本在其它地方,我没找到)
如果缺少相关的版本,可以先到oracle官网download,下面以64位odp.net为例:
1、下载完成后,将其解压到某个目录,比如E:\software\oracle11g\ODP.Net,然后键入以下命令:
E:\software\oracle11g\ODP.Net\x64> install.bat all c:\odp.net myhome (install all components)
上述命令将自动把所有文件复制到c:\odp.net下
2、然后转到c:\odp.net下,键入命令:
c:\odp.net> configure.bat all myhome (configure all component)
将自动向GAC中部署相应的程序集.
然后在vs2010里,添加引用时,应该就能看到Oracle.DataAccess的二个版本
2011041913273588.png
注:在这个界面上,只能看到2.112.2.0与4.112.2.0二个版本号,体现不出x86/x64的区别。
贴一段示例代码:
using System;
using Oracle.DataAccess.Client;

namespace test
{
    class Program
    {
        static void Main(string[] args)
        {
            //建议用这种风格的连接字符串,可以不用依赖于listener.ora文件中的配置
            string _connString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));User Id=scott;Password=tiger;";

            using (OracleConnection conn = new OracleConnection(_connString))
            {
                string sql = "select * from emp t where mgr=:mgr";
                OracleCommand cmd = new OracleCommand(sql, conn);
                conn.Open();
                cmd.Parameters.Add(new OracleParameter() { ParameterName="mgr",Value="7839" });
                OracleDataReader dr =  cmd.ExecuteReader();
                while (dr.Read())
                {
                    Console.WriteLine("empno:{0},ename:{1},mgr:{2}", dr["empno"], dr["ename"],dr["mgr"]);
                }
                dr.Close();
            }

            Console.Read();
        }
    }
}
总之一句话:要跑64位的.Net程序,就必须用64位的odp.net,要跑32位的.Net程序,就必须用32位的odp.net,且machine.config中要有相应的provider节点。
最后给出odp.net32位与64位的下载地址:
64位下载地址
32位下载地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用.NET(C#)连接ORACLE数据库,可以使用ODP.NETOracle Data Provider for .NET)。以下是连接ORACLE数据库的基本步骤: 1. 首先,确保您已经安装了ODP.NET驱动程序。可以从Oracle官方网站下载并安装ODP.NET。 2. 在您的C#项目中,添加对ODP.NET的引用。在Visual Studio中,右键单击项目,选择“添加”>“引用”,然后在“程序集”选项卡中找到和选择Oracle.DataAccess。 3. 在代码中,使用以下命名空间: ```csharp using Oracle.DataAccess.Client; ``` 4. 创建一个ORACLE数据库连接对象,并设置连接字符串: ```csharp string connectionString = "Data Source=your_oracle_server;User Id=your_username;Password=your_password;"; OracleConnection connection = new OracleConnection(connectionString); ``` 在上述连接字符串中,将"your_oracle_server"替换为ORACLE服务器的主机名或IP地址,"your_username"替换为数据库用户名,"your_password"替换为数据库密码。 5. 打开数据库连接: ```csharp connection.Open(); ``` 6. 创建一个ORACLE命令对象,并执行SQL查询或存储过程: ```csharp string sqlQuery = "SELECT * FROM your_table"; OracleCommand command = new OracleCommand(sqlQuery, connection); OracleDataReader reader = command.ExecuteReader(); while (reader.Read()) { // 处理每一行数据 // 例如:string value = reader.GetString(0); } reader.Close(); ``` 7. 最后,记得在使用完数据库连接后关闭连接: ```csharp connection.Close(); ``` 这样,您就可以使用ODP.NET连接ORACLE数据库,并执行相应的查询或存储过程。 希望对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值