通过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

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