1. 程式人生 > >c#之使用單例模式實現數據庫連接

c#之使用單例模式實現數據庫連接

strings instance ssl div lock config onf 鎖定 特殊

1、使用程序集Oracle.ManagedDataAccess.dll

using Oracle.ManagedDataAccess.Client;
using System.Configuration;

namespace ClassLibrary1
{
///


/// 數據庫連接練習單例模式
///

public class oracledbconect
{
private static OracleConnection con = null;
private static object obj = new object();
///
/// 定義公共靜態屬性instance,外部調用
///

public static OracleConnection instance
{
get
{
// 當第一個線程運行到這裏時,此時會對locker對象 "加鎖",
// 當第二個線程運行該方法時,首先檢測到locker對象為"加鎖"狀態,該線程就會掛起等待第一個線程解鎖
// lock語句運行完之後(即線程運行完之後)會對該對象"解鎖"
// 雙重鎖定只需要一句判斷就可以了
if (con==null)
{
lock (obj)
{
if (con==null)
{
var str = ConfigurationManager.ConnectionStrings["DBcontection"].ConnectionString;//獲取配置文件中的數據庫連接字符串
con = new OracleConnection(str);//實例化
try
{
con.Open();
}
catch (Exception e)
{
return null;
}
}
}
}
return con;
}
}

    // 私有構造函數是一種特殊的實例構造函數。它通常用在只包含靜態成員的類中。
    // 如果類具有一個或多個私有構造函數而沒有公共構造函數,則其他類(除嵌套類外)無法創建該類的實例。
    //聲明空構造函數可阻止自動生成默認構造函數,因為當編譯器看到我們的類中沒有定義構造函數時,編譯器會幫我們生成一個公有的無參構造函數。
    //註意,如果您不對構造函數使用訪問修飾符,則在默認情況下它仍為私有構造函數。
    // 但是,通常顯式地使用 private 修飾符來清楚地表明該類不能被實例化。

    private oracledbconect() { }
}

}

c#之使用單例模式實現數據庫連接