天天看點

通過odp.net方式連接配接Oracle資料庫

問題描述:

先說下基本開發環境:在winserver2008 r2 上安裝了oracle 32位Client,通過vs2012 建立C# 網站工程連接配接伺服器端的oracle。

連接配接字元串為:”Provider=OraOLEDB.Oracle;data source=ccenter;user id=query;password=query”

在調用 constring.Open();時報錯:“未在本地計算機上注冊“OraOLEDB.Oracle”提供程式。”

覺得這個問題很奇葩,我又用vs2012 建立了一個控制台的C#工程,同樣的連接配接方式就能成功的連上Oracle Server.

網上也百度提問了一下,給的結果如下:

通過odp.net方式連接配接Oracle資料庫

在網上我又找了好多方法都沒有解決,隻好采用odp.net的方式連接配接資料庫。

在此補充一下,因為之前連接配接oracle一直都是安裝好oracle client 之後才能往下連接配接。

參考位址如下:

http://www.cnblogs.com/yjmyzz/archive/2013/11/01/3400999.html

然後我也寫了一個自己的共通類庫,代碼如下:

using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;

namespace DataHelp
{
    public class ODPOracle
    {
        #region 類變量
        /// <summary>
        /// 連接配接資料庫類
        /// </summary>
        protected OracleConnection constring;

        /// <summary>
        /// 連接配接字元串
        /// </summary>
        private string strcon = "";
        #endregion

        #region 構造方法
        public ODPOracle()
        {

        }

        public ODPOracle(string constr)
        {
            strcon = constr;
        }
        #endregion

        #region 打開資料庫連接配接
        /// <summary>
        /// 打開資料庫連接配接
        /// </summary>
        public void Open()
        {
            try
            {
                constring = new OracleConnection(strcon == "" ? System.Configuration.ConfigurationSettings.AppSettings["constrOrcl"] : strcon);
                // <add key="constrOrcl" value="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.101)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=dat))));Persist Security Info=True;User ID=userTest;[email protected]*;"/>

                constring.Open();

            }
            catch (Exception ex)
            {
                LogService.Write("ODP類庫的Open方法發生異常:" + ex.Message);
                constring.Dispose();
            }
        }
        #endregion

        #region 關閉Oracle資料庫連接配接
        /// <summary>
        /// 關閉資料庫連接配接
        /// </summary>
        /// <param name="constring"></param>
        public void CloseConn()
        {
            if (constring == null) { return; }
            try
            {
                if (constring.State != ConnectionState.Closed)
                {
                    constring.Close();
                }
            }
            catch (Exception ex)
            {
                LogService.Write("ODP類庫的CloseConn方法發生異常:" + ex.Message);
            }
            finally
            {
                constring.Dispose();
            }
        }
        #endregion

        #region 執行SQL語句,傳回DataTable
        /// <summary>
        /// 執行Select語句,傳回DataTable
        /// </summary>
        /// <param name="CmdString">sql語句</param>
        /// <returns></returns>
        public DataTable GetDateTable(string CmdString)
        {
            DataTable dt = new DataTable();
            Open();

            OracleDataAdapter MyDa = new OracleDataAdapter(CmdString, constring);
            try
            {
                MyDa.Fill(dt);
                MyDa.Dispose();
                CloseConn();
            }
            catch (Exception ex)
            {
                LogService.Write("ODPOracle類庫的GetDateTable方法:" + ex.Message);
            }

            return dt;
        }
        #endregion

        #region 執行sql語句,傳回唯一的資料
        /// <summary>
        /// 執行sql語句,傳回唯一的資料,失敗傳回0
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public string ExecuteSale(string CmdString)
        {

            OracleCommand myCmd = new OracleCommand();

            try
            {
                Open();

                myCmd = new OracleCommand(CmdString, constring);
                return myCmd.ExecuteScalar().ToString();

            }
            catch (System.Exception ex)
            {
                LogService.Write("ODPOracle類庫的ExecuteSale方法:" + ex.Message);
            }
            finally
            {
                myCmd.Dispose();
                CloseConn();
            }
            return "";
        }
        #endregion

    }
}