zoukankan      html  css  js  c++  java
  • 连接Oracle的几种方式

    如何引用Data.OracleClient.dll

    由于从.net 4.0之后,微软将OracleClient.dll从框架里去除了,所以要使用,需要在VS2010里面去把项目的.net框架从.net 4.0 改成3.5,解决方案上->引用->添加引用,然后在.NET下就可以找到System.Data.OracleClient.dll,点击确定,就OK了。

    这下总可以用了吧,其实噩耗才开始:

    一:通过System.Data.OracleClient(需要安装Oracle客户端并配置tnsnames.ora)

    本地使用Oracle是指在安装Oracle数据库的主机中连接和使用Oracle数据库。从安全性和负载均衡的角度考虑,这种方式是不可取的。这里仅作为实验使用。

        本地连接的代码与远程连接实际上没有什么分别,只不过其data source指向服务器端的客户网络服务名。对于本文的数据库安装,它指向E:Oracle_Serveroracleora92 etworkadmin nsnames.ora文件中所定义的网络服务名(有关内容请参考“Oracle客户端的安装与远程连接配置”一文)。

        对于这种本地连接方式,在服务器端不能存在独立安装的客户端工具,否则data source只会去匹配独立客户端的tnsnames.ora文件,即使找不到对应的网络服务名,也不会再去匹配服务器端的服务名。这不知是.Net组件的设计错误,还是故意为之,以鼓励远程连接和使用Oracle。

        建立连接的主要代码如下:

        ......

        using System.Data.OracleClient;

        ......

        //这里的“remotedb”对应于“Oracle客户端的安装与远程连接配置”一文中配置的客户端网络服务名

        OracleConnection conn=
    
             new OracleConnection("data source=remotedb;User Id=scott;Password=scott;");
        conn.Open();
    
        ......

    1. 添加命名空间System.Data.OracleClient引用
    2. using System.Data.OracleClient;
    3. 

    string connString = "User ID=IFSAPP;Password=IFSAPP;Data Source=RACE;";
    OracleConnection conn = new OracleConnection(connString);
    try
    {
        conn.Open();
        MessageBox.Show(conn.State.ToString());
    }
    catch (Exception ex)
    {
        ShowErrorMessage(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }

    二:通过System.Data.OracleClient(需要安装Oracle客户端不需配置tnsnames.ora)

    使用客户端网络服务名连接Oracle

        基于业务逻辑与数据库实体的分层需要,一般要求在不同于Oracle数据库主机的客户端机器连接和使用Oracle数据库。这种情况要么是通过C/S应用程序的客户端访问数据库的情况;要么是在B/S应用程序中,在WEB服务器端远程连接Oracle数据库服务器。

        通过客户端网络服务名远程连接Oracle,要求在客户端机器中安装Oracle客户端工具(安装类型可以不必选择“管理员”模式,而只需要安装运行时支持即可,为应用程序提供基本的网络服务配置工具等)。

        建立连接的语句比较简单,关键点为data source的设置。这里的data source不像SqlServer连接字串中指的是数据库名称,而是指客户端网络服务名(相关内容请参考前面有关客户端安装的文章)。对于本文的Oracle安装来说,data source对应着E:Oracle_Clientoracleora92 etworkadmin nsnames.ora配置文件中的网络服务名(出于方便试验的原因,数据库与独立的客户端工具分别安装在了同一台机器的不同目录)。在具体实施连接时,将根据data source的值去该客户网络服务配置文件中查找对应项,以获取数据库服务器主机地址、端口、全局数据库名等连接信息。


    1. 添加命名空间System.Data.OracleClient引用
    2. using System.Data.OracleClient;
    3.

     string connString = "User ID=system;Password=123;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";
                using (OracleConnection conn = new OracleConnection(connString))
                {
                    conn.Open();
                    using (OracleCommand cmd = new OracleCommand("select * from  student", conn))
                    {
                        OracleDataAdapter sdat = new OracleDataAdapter(cmd);
                        DataSet ds = new DataSet();
                        sdat.Fill(ds,"p");
                        dgvData.DataSource=ds.Tables["p"];
                    }
    
                }

    :通过System.Data.OleDb和微软公司的Oracle驱动

    1. 添加命名空间System.Data.OracleClient引用
    2. using System.Data.OleDb;
    3.

    string connString = "Provider=MSDAORA.1;User ID=IFSAPP;Password=IFSAPP;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = RACE)))";
    OleDbConnection cnn = new OleDbConnection(connString);
    try
    {
        conn.Open();
        MessageBox.Show(conn.State.ToString());
    }
    catch (Exception ex)
    {
        ShowErrorMessage(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }

    备注:
    a.XP操作系统已经安装了微软公司的Oracle驱动C:Program FilesCommon FilesSystemOle DBmsdaora.dll
    b.该驱动需要Oracle客户端的三个文件(oraocixe10.dll、oci.dll、ociw32.dll)放在System32下即可

    四:使用ODP连接
    1. 下载安装ODP.NET(http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html)
    2. 安装完全成后会产生一序列文件。
    3. 找到这个安装目录,打开文件夹%ORACLE_HOME%NetworkAdmin在这个下面建立一个tnsnames.ora的文件,其内容可以参考其下的Sample目录下面的配置
    Oracle.RACE =
    (DESCRIPTION=
       (ADDRESS_LIST=
         (ADDRESS=
           (PROTOCOL=TCP)
           (HOST=127.0.0.1)
           (PORT=1521)
         )
       )
       (CONNECT_DATA=
         (SID=RACE)
         (SERVER=DEDICATED)
       )
    )
    Oracle.RACE为连接字符串名称,可以随便取。等号后面的字符串可以在Enterprise Manager Console工具中连接数据库后的TNS描述符中拷过来
    4. 引用Oracle.DataAccess命名空间
    5. using Oracle.DataAccess.Client;
    6. 示例代码:
    string connString = "DATA SOURCE=Oracle.RACE;PERSIST SECURITY INFO=True;USER ID=IFSAPP;password=IFSAPP";
    OracleConnection conn = new OracleConnection(connString);
    try
    {
        conn.Open();
        OracleCommand cmd = new OracleCommand(cmdText,conn);
        OracleDataReader reader = cmd.ExecuteReader();
        this.DataGridView1.DataSource = reader;
        this.DataGridView1.DataBind();
    }
    catch (Exception ex)
    {
        ShowErrorMessage(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }

    五:使用第三方驱动
    第三方驱动有 Devart,下载驱动 http://www.devart.com/dotconnect/oracle/,但是是商业版,需要购买许可或破解
    连接格式 User ID=myUsername;Password=myPassword;Host=ora;Pooling=true;Min Pool Size=0;Max Pool Size=100;Connection Lifetime=0;
    1. 引用Devart.Data.Oracle命名空间
    2. using Devart.Data.Oracle;
    3.
    OracleConnection conn = new OracleConnection();
    conn.ConnectionString = "";
    conn.Unicode = true;
    conn.UserId = "IFSAPP";
    conn.Password = "IFSAPP";
    conn.Port = 1521;
    conn.Server = "127.0.0.1";
    conn.Sid = "RACE";
    try
    {
        conn.Open();
        //execute queries, etc
    }
    catch (Exception ex)
    {
        ShowErrorMessage(ex.Message.ToString());
    }
    finally
    {
        conn.Close();
    }

  • 相关阅读:
    攻防世界web新手区前六关
    JS-数组基础知识3
    CSRF攻击的原理和spring security对CSRF攻击的解决方法
    Java开发微信公众号
    内部类
    Java Web整合开发(30) -- Spring的ORM模块
    win10安装mysql
    jquery 事件冒泡的介绍以及如何阻止事件冒泡
    jquery中attr和prop的区别介绍
    jQuery 层次选择器
  • 原文地址:https://www.cnblogs.com/hongmaju/p/4595095.html
Copyright © 2011-2022 走看看