你的位置:首页 > 数据库

[数据库]电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具

Oracle的安装包通常都比较大,安装又比较费时,而且如果安装过程中不幸出错,各种蛋疼,即便是安装过N遍的老手,有时候安装起来也觉得挺烦。而工作中,通常服务器上面安装oracle就可以了,我们本地电脑只需要安装一个oracle客户端,然后连接到服务器就可以了。

Oracle 轻量级客户端我推荐使用Navicat For Oracle。

1、下载以下几个dll,我这里使用的是oracle11g,这几个DLL的下载地址:http://pan.baidu.com/s/1kU1JafX

2、将其拷贝到项目中,设置dll属性为“复制到输出目录”为“始终复制”

3、项目中添加Oracle.DataAccess.dll的引用

4、创建oracle操作类ORacleDBHelp

/* ==============================================================================  * 功能描述:ORacleDBHelp   * 创 建 者:Zouqj  * 创建日期:2015/9/9 14:30:22  ==============================================================================*/using System;using System.Collections.Generic;using System.Text;using System.Configuration;using System.Data;using System.Threading;using System.Transactions;using Oracle.DataAccess.Client;using Oracle.DataAccess.Types;using Oracle.DataAccess;using DBHelper.Interface;namespace DBHelper{  public class ORacleDBHelp : ITransDB  {    private static OracleConnection conn;    private bool IsTran = false;    private OracleConnection TranConn;    private OracleCommand cmd;    private OracleTransaction Transaction;    #region 事务处理方法    /// <summary>    /// 开启全局事务处理    /// </summary>    public void BeginTransaction()    {      TranConn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString);      if (TranConn.State == ConnectionState.Closed)      {        TranConn.Open();      }      Transaction = TranConn.BeginTransaction();      cmd = new OracleCommand("", TranConn);      cmd.CommandTimeout = 600;      IsTran = true;    }    /// <summary>    /// 提交全局事务处理    /// </summary>    public void Commit()    {      cmd.Transaction.Commit();//事务提交      Transaction.Dispose();      cmd.Dispose();      TranConn.Close();      TranConn.Dispose();    }    /// <summary>    /// 回滚全局事务处理    /// </summary>    public void Rollback()    {      if (IsTran)      {        cmd.Transaction.Rollback();//事务回滚        Transaction.Dispose();        cmd.Dispose();        TranConn.Close();        TranConn.Dispose();      }    }    /// <summary>    /// 执行不带参数sql语句,返回所影响的行数    /// </summary>    /// <param name="cmdstr">增,删,改sql语句</param>    /// <returns>返回所影响的行数</returns>    public int TranExecuteNonQuery(string cmdText)    {      int count;      try      {        cmd.CommandText = cmdText;        cmd.CommandTimeout = 600;        if (cmd.Connection.State == ConnectionState.Closed)        {          cmd.Connection.Open();        }        count = cmd.ExecuteNonQuery();      }      catch (Exception ex)      {        throw new Exception(ex.Message.ToString().Trim());      }      return count;    }    #endregion    #region 建立数据库连接对象    /// <summary>    /// 建立数据库连接    /// </summary>    /// <returns>返回一个数据库的连接OracleConnection对象</returns>    public static OracleConnection init()    {      try      {        if (conn == null)        {          conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnection"].ToString().Trim());        }        if (conn.State != ConnectionState.Open)        {          conn.Open();        }      }      catch (Exception e)      {        try        {          Thread.Sleep(5000);          conn = new OracleConnection(ConfigurationManager.ConnectionStrings["OracleConnection"].ToString().Trim());          if (conn.State != ConnectionState.Open)          {            conn.Open();          }        }        catch (Exception)        {          throw new Exception(e.Message.ToString().Trim());        }      }      return conn;    }    #endregion    /// <summary>    /// 执行不带参数sql语句,返回所影响的行数    /// </summary>    /// <param name="cmdstr">增,删,改sql语句</param>    /// <returns>返回所影响的行数</returns>    public static int ExecuteNonQuery(string cmdText)    {      int count;      OracleCommand ocmd = null;      try      {        init();        ocmd = new OracleCommand("", conn);        ocmd.CommandTimeout = 600;        ocmd.CommandText = cmdText;        count = ocmd.ExecuteNonQuery();      }      catch (Exception ex)      {        throw new Exception(ex.Message.ToString().Trim());      }      return count;    }    /// <summary>    /// 执行不带参数sql语句,返回一个从数据源读取数据的OracleDataReader对象    /// </summary>    /// <param name="cmdstr">相应的sql语句</param>    /// <returns>返回一个从数据源读取数据的OracleDataReader对象</returns>    public static DataTable GetDataTable1(string cmdText)    {      OracleDataReader reader;      OracleCommand ocmd = null;      DataTable dt = new DataTable();      try      {        init();        ocmd = new OracleCommand("", conn);        ocmd.CommandTimeout = 600;        ocmd.CommandText = cmdText;        ocmd.CommandTimeout = 600;        reader = ocmd.ExecuteReader();        dt.Load(reader);        reader.Dispose();      }      catch (Exception ex)      {        throw new Exception(ex.Message.ToString().Trim());      }      return dt;    }  }}

View Code

ITransDB接口

/* ==============================================================================  * 功能描述:ITransDB   * 创 建 者:Zouqj  * 创建日期:2015/9/9 14:31:32  ==============================================================================*/using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace DBHelper.Interface{  public interface ITransDB  {    void BeginTransaction();    int TranExecuteNonQuery(string sql);    void Commit();    void Rollback();  }}

现在可以通过C#来直接调用oracle操作了。

接下来,通过Oracle客户端连接到Oracle服务器

安装完Navicat For Oracle后,我们电脑上面没有安装oracle,将下载的dll拷贝到Navicat For Oracle的安装目录,我电脑上面是:D:\Program Files (x86)\PremiumSoft\Navicat for Oracle\instantclient_10_2\

然后配置Navicat For Oracle,“工具”——“选项”

这个时候,Navicat For Oracle就可以连接服务器上面的Oracle数据库了。