zoukankan      html  css  js  c++  java
  • C#使用Oracle.ManagedDataAccess.dll

    在刚接触C#的时候由于公司使用的就是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去掌握的知识点了。在那时没有ODP.NET,但visual studio却对Oralce数据库的调用进行了集成,就是下图中的这个,尽管现在使用这个的时候visual studio提醒过时的,但在那时却是非常好用的。

    为什么现在visual studio中这个程序集依然能使用,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll进行本文的重点呢?

    1、visual studio中提醒过时,因为微软和甲骨文存在数据库的竞争关系,并且从.NET的更新来看这个程序集没有再更新过,对于数据库一直在更新而调用的程序集一直不更新敢用下去么?还有一个我认为非常重要的原因就是使用这个程序集,摆脱不了每一个运行程序的客户机上都要去安装Oracle客户端的事实,试想一下,如果用户数量巨大的时候,安装客户端的工作量就相当的大,很耗费资源;

    2、甲骨文后来出了ODP.NET,各种资料以及官网上都说需要安装ODP.NET,然后引用Oracle.ManagedDataAccess.dll,他和visual studio中的程序集最大的区别在于会随着数据库更新,是oracle官方出的驱动;

    3、其实经过测试,ODP.NET的安装完全是没有必要的,直接在网上下载一个Oracle.ManagedDataAccess.dll,按如下方式引用即可,使用此种方式减少了ODP.NET的安装,无视操作系统的位数,最重要的是减少了Oracle客户端的安装;

    那在哪里下载Oracle.ManagedDataAccess.dll呢?如果Oracle.ManagedDataAccess.dll有更新怎么知道呢?这个时候全宇宙最强大开发工具登场了!

    安装完成就可以撸代码了,并且如果有更新可以随时能看到。并且在编程方面和以前使用System.Data.OracleClient程序集没有多大的不同,基本上拿以前使用System.Data.OracleClient程序集的代码做少许的改动即可。

    1、使用了连接字符串,而不是用oracle客户端的服务名了;

    2、几个命名空间的变化;

    下面是对数据库常用操作的封装

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    using Oracle.ManagedDataAccess.Client;
    using System.Data;
    using System.IO;
    using System.Collections;
    using System.Diagnostics;
    using Oracle.ManagedDataAccess.Types;
    
    namespace OracleDemo
    {
        public class OracleHelper
        {
            private static string connStr = "User Id=admin;Password=123;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=test)))";
    
            #region 执行SQL语句,返回受影响行数
            public static int ExecuteNonQuery(string sql, params OracleParameter[] parameters)
            {
                using (OracleConnection conn = new OracleConnection(connStr))
                {
                    conn.Open();
                    using (OracleCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.Parameters.AddRange(parameters);
                        return cmd.ExecuteNonQuery();
                    }
                }
            }
            #endregion
            #region 执行SQL语句,返回DataTable;只用来执行查询结果比较少的情况
            public static DataTable ExecuteDataTable(string sql, params OracleParameter[] parameters)
            {
                using (OracleConnection conn = new OracleConnection(connStr))
                {
                    conn.Open();
                    using (OracleCommand cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.Parameters.AddRange(parameters);
                        OracleDataAdapter adapter = new OracleDataAdapter(cmd);
                        DataTable datatable = new DataTable();
                        adapter.Fill(datatable);
                        return datatable;
                    }
                }
            }
            #endregion
        }
    }

    以下代码是调用部分

                    string sqlString = "Select a.col1,a.col2 From test a Where a.id=:id";
                    DataTable dt = OracleHelper.ExecuteDataTable(sqlString,new OracleParameter(":id",1));

    程序编写完成,生成完成后,目录大概如下:

    这时候拷贝Debug文件夹到目标客户电脑上即可直接运行了(前提是目标客户电脑上有.NET Framework),完全摆脱安装Oracle客户端。

  • 相关阅读:
    PostgreSQL中的partition-wise join
    Partition-wise join
    外观模式 门面模式 Facade 结构型 设计模式(十三)
    桥接模式 桥梁模式 bridge 结构型 设计模式(十二)
    组合模式 合成模式 COMPOSITE 结构型 设计模式(十一)
    创建型设计模式对比总结 设计模式(八)
    原型模式 prototype 创建型 设计模式(七)
    单例模式 创建型 设计模式(六)
    建造者模式 生成器模式 创建型 设计模式(五)
    抽象工厂模式 创建型 设计模式(四)
  • 原文地址:https://www.cnblogs.com/goldenbridge/p/7812081.html
Copyright © 2011-2022 走看看