通過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一直都是安裝好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;Password=Pass@word*;"/>

                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

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章