• C# 不安装Oracle客户端情况下,如何连接到Oracle数据库


    简介:

      在我们开发应用场景经常碰到需要连接Oracle数据库,这也是相当常见的一种情况。一般.Net环境连接Oracle数据库,可以通过TNS/SQL.NET 配置文件,而 TNS 必须要 Oracle 客户端。
      场景一、很多在使用微软自带的Using System.Data.OracleClient(据说现在已经不维护的)的时候,在没有安装Oracle客户端的服务器上运行,会提示你需要安装Oracle客户端,不过在Oracle 12以后的版本都很少使用这种方法了。
      场景二、也有很多人直接调用了Oracle客户端下的Oracle.DataAccess.dll(一般在Oracle安装目录下的product11.2.0dbhome_1ODP.NETin2.x当中)。但是在程序运行时,碰到最多的情况可能就是,Oracle.DataAccess.Client.OracleException报错:提供程序与此版本的 Oracle 客户机不兼容(一般检查下本机的Oracle的Oracle.DataAccess.dll和你引用的Oracle.DataAccess.dll版本是不是一致的,替换相同的版本就能解决此问题)。
      下面主要介绍,不需要安装Oracle客户端,通过最新的ODP.Net方式(Oracle.ManagedDataAccess.dll)直接连接Oracle数据库。

    Oracle全托管驱动Oracle.ManagedDataAccess

      Oracle官网为C#提供了全新的ODP.Net方式的全托管驱动Oracle.ManagedDataAccess,并且还 EF 支持分布式事务,官网下载地址(地址还挺不好找的,下载的时候需要Oracle账户才行,没有的话注册一个也挺快的)—传送门:http://www.oracle.com/technetwork/database/windows/downloads/index-090165.html,如图所示:

      下载解压找到我们需要的Oracle.ManagedDataAccess.dll,如果你使用EF框架,则选择EF6当中的dll,如图所示:

      将Oracle.ManagedDataAccess.dll引用到我们的项目当中,然后检验下链接Oracle是否连接成功。

      代码段:

    复制代码
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Data;
     4 using System.Linq;
     5 using System.Text;
     6 using System.Threading.Tasks;
     7 using Oracle.ManagedDataAccess.Client;
     8 
     9 namespace ForbiddenTools
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             Console.Title = "Oracel连接测试";
    16             string connString = @"Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器IP地址)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME = 服务器名称)));User Id=用户名;Password=密码;";
    17             OracleConnection conn = new OracleConnection(connString);
    18             conn.Open();
    19             if (conn.State == ConnectionState.Open)
    20             {
    21                 string sql = @"select sysdate from dual";
    22                 OracleCommand cmd = new OracleCommand(sql, conn);
    23                 Console.WriteLine(cmd.ExecuteScalar());
    24                 conn.Close();
    25             }
    26             Console.ReadKey();
    27         }
    28     }
    29 }
    复制代码

    PS:如有疑问,请留言,未经允许,不得私自转载,转载请注明出处:http://www.cnblogs.com/xuliangxing/p/8391547.html

  • 相关阅读:
    codeforces #313(div 2)
    云计算设计模式(二十四)——仆人键模式
    封装一个ViewPager真正的实现图片无限循环滚动带导航点
    HDU4622:Reincarnation(后缀数组,求区间内不同子串的个数)
    数据库分页
    [Swift]LeetCode728. 自除数 | Self Dividing Numbers
    [Swift]LeetCode726. 原子的数量 | Number of Atoms
    [Swift]LeetCode725. 分隔链表 | Split Linked List in Parts
    [Swift]LeetCode724. 寻找数组的中心索引 | Find Pivot Index
    [Swift]LeetCode722. 删除注释 | Remove Comments
  • 原文地址:https://www.cnblogs.com/LessNull/p/11286397.html
Copyright © 2020-2023  润新知