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() { }
}
}