种种办法连接Oracle

By admin in 4858.com on 2019年5月6日

废话不多说一贯正题:

在刚接触C#的时候由于集团使用的正是Oracle数据库,那么C#怎么连接Oracle数据库就成了重大去调控的知识点了。在这儿没有ODP.NET,但visual
studio却对Oralce数据库的调用举办了集成,便是下图中的那几个,固然现近日利用这几个的时候visual
studio提示过时的,但在当时却是非凡好用的。4858.com 1

C#种种办法连接Oracle。使用Oracle.ManagedDataAccess.dll,

在刚接触C#的时候是因为公司采取的正是Oracle数据库,那么C#怎么连接Oracle数据库就成了要害去调节的知识点了。在那儿未有ODP.NET,但visual
studio却对Oralce数据库的调用举办了合并,便是下图中的这么些,固然今Smart用那几个的时候visual
studio提醒过时的,但在那时候却是非凡好用的。4858.com 2

怎么未来visual
studio中那个程序集还是能选择,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll实行本文的主要呢?

一、visual
studio中唤醒过时,因为微软软陶文存在数据库的竞争关系,并且从.NET的更新来看那么些顺序集并未有再立异过,对于数据库一直在更新而调用的先后集从来不更新敢用下去么?还有2个自己觉着不行首要的缘由就是行使这些程序集,摆脱不了每多个运维程序的客户机上都要去安装Oracle客户端的真情,试想一下,若是用户数量巨大的时候,安装客户端的职业量就一定的大,很费用财富;

2、小篆后来出了ODP.NET,各类资料以及官英特网都说须求设置ODP.NET,然后引用Oracle.ManagedDataAccess.dll,他和visual
studio中的程序集最大的区分在于会趁着数据库更新,是oracle官方出的驱动;

3、其实通过测试,ODP.NET的装置完全是绝非供给的,直接在网络下载一个Oracle.ManagedDataAccess.dll,按如下格局引用就能够,使用此种格局减弱了ODP.NET的安装,无视操作系统的位数,最要害的是缩减了Oracle客户端的设置;

4858.com 3

4858.com 4

4858.com 5

 

这在哪个地方下载Oracle.ManagedDataAccess.dll呢?如若Oracle.ManagedDataAccess.dll有创新怎么驾驭啊?这一年全宇宙最强大开拓工具进场了!

4858.com 6

4858.com 7

4858.com 8

安装完结就足以撸代码了,并且只要有创新能够随时能看出。并且在编制程序方面和原先使用System.Data.OracleClient程序集并未有多大的例外,基本上拿从前使用System.Data.OracleClient程序集的代码做轻巧的退换就可以。

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

二、多少个命名空间的变通;

上边是对数据库常用操作的包装

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));

 

先后编写制定成功,生成实现后,目录差不多如下:

4858.com 9

那时拷贝Debug文件夹到指标客户计算机上就能够直接运转了(前提是指标客户Computer上有.NET
Framework),完全摆脱安装Oracle客户端。

 

在刚接触C#的时候是因为公司利用的便是Oracle数据库,那么C#怎么连接Oracle数据库就成了注重去调节的知识点了…

在刚接触C#的时候由于公司利用的正是Oracle数据库,那么C#怎么连接Oracle数据库就成了首要去调节的知识点了。在当时未有ODP.NET,但visual
studio却对Oralce数据库的调用实行了集成,正是下图中的那一个,固然今后使用那几个的时候visual
studio提示过时的,但在那儿却是非凡好用的。4858.com 10

率先大家先在Oracle数据库下建了3个用户叫做lisi,密码为lisi,在那几个用户下树立一张表叫做“USE奥迪Q5S”,在那么些表下新添多个数据。

何以现在visual
studio中那些程序集依然能利用,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll实行本文的基本点呢?

为什么将来visual
studio中这几个顺序集如故能应用,有ODP.NET,单单要拿出Oracle.ManagedDataAccess.dll举行本文的第一呢?

4858.com 11

1、visual
studio中提示过时,因为微细软甲骨文存在数据库的竞争关系,并且从.NET的换代来看这一个顺序集并未有再立异过,对于数据库一直在更新而调用的顺序集平素不立异敢用下去么?还有三个作者感觉卓殊重大的缘故正是使用那个程序集,摆脱不了每1个周转程序的客户机上都要去安装Oracle客户端的实况,试想一下,假使用户数量巨大的时候,安装客户端的事业量就比相当的大,很开销财富;

一、visual
studio中晋升过时,因为微松软小篆存在数据库的竞争关系,并且从.NET的更新来看这么些顺序集并未有再立异过,对于数据库平素在更新而调用的程序集一向不更新敢用下去么?还有叁个自个儿觉着不行关键的由来正是采纳那个程序集,摆脱不了每3个运转程序的客户机上都要去安装Oracle客户端的真相,试想一下,假设用户数量巨大的时候,安装客户端的工作量就一定的大,很费用财富;

 

二、燕书后来出了ODP.NET,各个材质以及官方网址络都说需求设置ODP.NET,然后引用Oracle.ManagedDataAccess.dll,他和visual
studio中的程序集最大的分裂在于会随着数据库更新,是oracle官方出的驱动;

二、行书后来出了ODP.NET,各样材质以及官英特网都说供给安装ODP.NET,然后引用Oracle.ManagedDataAccess.dll,他和visual
studio中的程序集最大的不相同在于会趁着数据库更新,是oracle官方出的驱动;

方式一:利用OleDb连接Oracle。

三、其实通过测试,ODP.NET的装置完全是从未有过必要的,直接在英特网下载几个Oracle.ManagedDataAccess.dll,按如下情势引用就能够,使用此种情势缩短了ODP.NET的装置,无视操作系统的位数,最器重的是减掉了Oracle客户端的设置;

三、其实通过测试,ODP.NET的装置完全是尚未需求的,直接在网络下载三个Oracle.ManagedDataAccess.dll,按如下格局引用就能够,使用此种格局减弱了ODP.NET的装置,无视操作系统的位数,最首要的是削减了Oracle客户端的安装;

 1    #region  使用OleDb方式
 2             Console.WriteLine("OleDb方式");
 3             OleDbConnection oledbConnection = new OleDbConnection("Provider=OraOLEDB.Oracle; Data Source=MLDN; User Id=lisi; Password=lisi;");
 4             OleDbCommand oledbCommand = new OleDbCommand();
 5             oledbCommand.CommandText = "select * from USERS";
 6             oledbCommand.CommandType = CommandType.Text;
 7             oledbCommand.Connection = oledbConnection;
 8             oledbConnection.Open();
 9             var oledbReader = oledbCommand.ExecuteReader();
10             while (oledbReader.Read())
11             {
12                 Console.WriteLine("姓名:"+oledbReader[1]);
13             }
14             oledbConnection.Close();
15   #endregion

4858.com 12

4858.com 13

主意贰:利用Oracle.ManagedDataAccess.Client方式,在动用前,大家须求先在Nuget中找到Oracle.ManagedDataAccess,然后安装,该方法好处之一是无需在客户端上设置Oracle客户端,该版本是由Oracle公司开销的,而且微软1度放任了谐和的System.Data.OracleClient情势(上面会有介绍),推荐使用那种方法。

4858.com 14

4858.com 15

4858.com 16

4858.com 17

4858.com 18

程式码如下:

 

 

  #region OracleConnection
            //OracleConnection connection = new OracleConnection("Password=lisi;User ID=lisi;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.229.138)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=****)))");没有安装客户端的话,可以使用这种方式
            Console.WriteLine("Oracle.ManagedDataAccess.Client方式");
            OracleConnection oralceConnection = new OracleConnection("Data Source=MLDN; User Id=lisi; Password=lisi;");
            oralceConnection.Open();
            OracleCommand oracleCommand = new OracleCommand();
            oracleCommand.CommandText = "select * from USERS";
            oracleCommand.CommandType = CommandType.Text;
            oracleCommand.Connection = oralceConnection;
            var oracleReader = oracleCommand.ExecuteReader();
            while (oracleReader.Read())
            {
                Console.WriteLine("姓名:" + oracleReader[1]);
            }
            oralceConnection.Close();
            #endregion

那在什么地方下载Oracle.ManagedDataAccess.dll呢?假设Oracle.ManagedDataAccess.dll有更新怎么精通啊?今年全宇宙最有力开荒工具上台了!

那在哪个地方下载Oracle.ManagedDataAccess.dll呢?要是Oracle.ManagedDataAccess.dll有创新怎么驾驭吗?那个时候全宇宙最壮大开垦工具上台了!

方式三:利用odbc方式

4858.com 19

4858.com 20

        #region odbc

            Console.WriteLine("odbc方式");
            OdbcConnection odbcConnection = new OdbcConnection("Driver={Microsoft ODBC for Oracle};Server=MLDN;Uid=lisi;Pwd=lisi;");
            odbcConnection.Open();
         OdbcCommand odbcCommand = new OdbcCommand();
         odbcCommand.CommandText = "select * from USERS";
         odbcCommand.CommandType = CommandType.Text;
         odbcCommand.Connection = odbcConnection;
         var odbcReader= odbcCommand.ExecuteReader();

         while (odbcReader.Read())
         {
             Console.WriteLine("姓名:" + odbcReader[1]);
         } 
            odbcConnection.Close();

#endregion

4858.com 21

4858.com 22

 

4858.com 23

4858.com 24

方法四:利用System.Data.OracleClient格局(该方法已不合时宜,不引入应用)。

设置到位就足以撸代码了,并且只要有更新能够随时能旁观。并且在编程方面和原先使用System.Data.OracleClient程序集并没有多大的例外,基本上拿从前使用System.Data.OracleClient程序集的代码做轻便的转移就可以。

安装实现就能够撸代码了,并且只要有革新能够每一天能来看。并且在编制程序方面和从前使用System.Data.OracleClient程序集并未有多大的不等,基本上拿在此以前使用System.Data.OracleClient程序集的代码做轻松的更换就能够。

4858.com 25

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

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

虽说曾经不合时宜了而是还是得以利用的,代码如下:

二、多少个命名空间的改变;

二、几个命名空间的更改;

 1       #region
 2 
 3             Console.WriteLine("System.Data.OracleClient方式");
 4          System.Data.OracleClient.OracleConnection clientConnection = new System.Data.OracleClient.OracleConnection();
 5          clientConnection.ConnectionString = " Data Source=MLDN; User Id=lisi; Password=lisi;";
 6          System.Data.OracleClient.OracleCommand clientCommand = new System.Data.OracleClient.OracleCommand();
 7 
 8          clientCommand.CommandText = "select * from USERS";
 9          clientCommand.Connection = clientConnection;
10          clientCommand.CommandType = CommandType.Text;
11          clientConnection.Open();
12          var clientReader = clientCommand.ExecuteReader();
13          while (clientReader.Read())
14          {
15 
16              Console.WriteLine("姓名:" + clientReader[1]);
17          }
18          clientConnection.Close();
19             #endregion

下边是对数据库常用操作的包装

上面是对数据库常用操作的包裹

 方式伍:使用能够连接Oracle的Entity
Framework工具,在选取前须要先安装3个插件包,小编的VS是20一叁的,插件包在如下地址:

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
    }
}
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
    }
}

 http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/odacmsidownloadvs2013-2756823-zhs.html

以下代码是调用部分

4858.com ,以下代码是调用部分

当安装好了随后,大家能够使用EF去连接Oralce资料库了,连接方式如下:

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

4858.com 26

 

 

4858.com 27

程序编写制定成功,生成达成后,目录大约如下:

程序编写制定成功,生成完结后,目录大约如下:

然后咱们在UI画面中拉取我们须要运用的表,注意选拔EF的时候是要安装表主键的,所以大家必要设置USE途达S这张表的ID为主键,不然未有章程拉取到该表对象。

4858.com 28

4858.com 29

4858.com 30

此刻拷贝Debug文件夹到目标客户Computer上即可直接运营了(前提是指标客户Computer上有.NET
Framework),完全摆脱安装Oracle客户端。

此刻拷贝Debug文件夹到指标客户计算机上就可以直接运营了(前提是指标客户Computer上有.NET
Framework),完全摆脱安装Oracle客户端。

 代码如下:

 

 

  #region Oracle EF
         Console.WriteLine("Oracle EF方式");
         Entities db = new Entities();
         var users = db.USERS.ToList();
         foreach (var item in users)
         {
             Console.WriteLine("姓名:" + item.NAME);
         }
     #endregion 

 

 推行结果画面:

 4858.com 31

 

综上是自个儿眼下所理解的连接Oracle的措施,至于还有其余办法,小编一时半刻或许就不太领会了。

参照小说:

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有