問題描述:
先說下基本開發環境:在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;[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
}
}