.NET連接Oracle數(shù)據(jù)庫踩過的坑

1 常用數(shù)據(jù)庫訪問類

一般來說,C#連接Oracle數(shù)據(jù)庫,我們通常會通過封裝好的dll調(diào)用,目前常用的有三個:

(1)System.Data.OracleClient.dll(微軟)
(2)Oracle.DataAccess.Client.dll(Oracle,也稱ODP.NET)
(3)Oracle.ManagedDataAccess.dll(Oracle)

1.1 System.Data.OracleClient.dll

首先需安裝Oracle客戶端,然后可直接直接引用微軟的System.Data.OracleClient,但VS會提示“System.Data.OracleClient.OracleConnection”已過時。經(jīng)測試雖然提示過時但仍可正常使用,微軟已經(jīng)很久沒有更新過這個訪問類了,安全性方面無保障。

1.2 Oracle.DataAccess.Client.dll

Oracle提供的數(shù)據(jù)庫訪問類庫,簡稱ODP.NET,其功能和效率上都有所保證,訪問效率和速度都要比微軟的System.Data.OracleClient優(yōu)秀。

優(yōu)點:
(1)無需安裝Oracle客戶端,程序也能訪問服務(wù)器上的Oracle
(2)不需要配置tnsnames.ora文件

缺點:
(1)要區(qū)分用區(qū)分x86/x64版本

1.3 Oracle.ManagedDataAccess.dll

推薦這一種,Oracle官方出品,日常更新維護,無需安裝Oracle客戶端,不用區(qū)分操作系統(tǒng)位數(shù)。


日常更新

2 踩過的坑

2.1 從System.Data.OracleClient到Oracle.ManagedDataAccess

一般來講,我們會把數(shù)據(jù)庫的連接信息寫在config文件中,通過System.Configuration.dll讀取,然后執(zhí)行操作。

<!--tnsnames.ora中的服務(wù)名-->
xxx =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = x.xx.xx.xxx)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )
<!--System.Data.OracleClient的數(shù)據(jù)庫鏈接-->
<connectionStrings>
    <add name="OracleConn" connectionString="Data Source=xxx(tnsnames.ora中配置的服務(wù)名);User ID=xxx;Password=xxx"/>
</connectionStrings>
/// <summary>
/// 獲取Oracle連接字符串
/// </summary>
public class PubConstant
{
    public static string GetOracleConString(string conval)
    {
        string connectionString  = ConfigurationManager.ConnectionStrings[conval].ToString();
        return connectionString;
    }
}
//從config文件里面獲取數(shù)據(jù)庫連接信息
private static readonly string connectionString = PubConstant.GetOracleConString("OracleConn");
/// <summary>
/// 執(zhí)行參數(shù)化查詢語句,返回DataSet
/// </summary>
public DataSet QueryByCSH(string SQLString, string cphm, string dlyszh)
{
    using (OracleConnection connection = new OracleConnection(connectionString))
    {
        DataSet ds = new DataSet();
        try
        {
            connection.Open();
            OracleDataAdapter command = new OracleDataAdapter(SQLString, connection);
            command.SelectCommand.Parameters.Add(":cphm", cphm);
            command.SelectCommand.Parameters.Add(":dlyszh", dlyszh);
            command.Fill(ds, "ds");
        }
        catch (OracleException ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            connection.Close();
        }
        return ds;
    }
}

經(jīng)過上面的一些列操作之后發(fā)現(xiàn),每次在connection.Open()出都會報“無法識別連接字符串”的異常,已安裝Oracle客戶端,數(shù)據(jù)庫服務(wù)器IP、端口、用戶名、密碼都正確,百度了好久沒有結(jié)果。

2.2 從連接服務(wù)名到連接字符串

終于,無意間看見一篇名為“C#使用Oracle.ManagedDataAccess.dll”的文章,于是將連接服務(wù)名改為了連接字符串,結(jié)果成功打開數(shù)據(jù)庫連接。

<!--Oracle.ManagedDataAccess的數(shù)據(jù)庫鏈接-->
<connectionStrings>
    <add name="OracleConn" connectionString="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=x.xx.xx.xxx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)));User ID=xxx;Password=xxx"/>
</connectionStrings>

至此,記錄下了我使用Oracle.ManagedDataAccess.dll遇到的問題,希望能給小伙伴們提供一點幫助!
參考鏈接:點擊前往

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容