com.joybase.DB.dll源代碼(4)
2024-07-21 02:22:35
供稿:網(wǎng)友
/// <summary>
/// 內(nèi)部保護(hù)的數(shù)據(jù)庫(kù)連接類(lèi)
/// </summary>
protected abstract class provider
{
//一個(gè)靜態(tài)的連接接口;
private static system.data.idbconnection conn;
/// <summary>
/// 構(gòu)造方法,設(shè)為私有類(lèi)型,是防止外部無(wú)效的引用;
/// </summary>
protected provider()
{
system.data.idbcommand x=new system.data.oledb.oledbcommand();
}
/// <summary>
/// 返回?cái)?shù)據(jù)庫(kù)邊接類(lèi)型
/// </summary>
public static dbtype type
{
get
{
return provider.m_dbtype;
}
set
{
provider.m_dbtype=value;
}
}
private static string m_connectionstring;
private static string m_connectionstringsetname;
/// <summary>
/// 數(shù)據(jù)庫(kù)連接字符串設(shè)置名稱(chēng)
/// </summary>
public static string connectionsetname
{
set
{
provider.m_connectionstringsetname=value;
}
}
/// <summary>
/// 數(shù)據(jù)庫(kù)連接字符串
/// </summary>
public static string connectionstring
{
set
{
provider.m_connectionstring=value;
}
}
private static dbtype m_dbtype;
/// <summary>
/// 獲得數(shù)據(jù)庫(kù)連接接口
/// </summary>
/// <returns>返回一個(gè)連接</returns>
public static system.data.idbconnection getconn()
{
string connstr="";
try{
//system.threading.thread.getdomain().unhandledexception+=new unhandledexceptioneventhandler(throwdbexception);
if(provider.m_connectionstring==""||provider.m_connectionstring==null)
{
if(provider.m_connectionstringsetname.trim()=="")
{
connstr=system.configuration.configurationsettings.appsettings["database.connectionstring"];
}
else
{
connstr=system.configuration.configurationsettings.appsettings[provider.m_connectionstringsetname];
}
}
else
{
connstr=provider.m_connectionstring;
}
if(connstr==null||connstr=="")
{
throw new joybasedbexception("連接字符串為空或者是null類(lèi)型,請(qǐng)檢查您的connectionstring以及connectionsetname是否進(jìn)行正確設(shè)置,或者閱讀相關(guān)說(shuō)明.");
}
//dbtype m_dbtype;//=provider.databasetype;
/*
* 注釋?zhuān)何覀儗?duì)前面的編碼進(jìn)行了部分的修改,鑒于system.data.sqlclient的連接
* 字符串當(dāng)中不可能出現(xiàn)"provider"字樣,所以我們根據(jù)是否有provider字樣來(lái)判斷
* 該連接是基于system.data.sqlclient的或者system.data.oledb的。
* 參考資料:
* 可以將 connectionstring 屬性設(shè)置為單個(gè)單元。(不能為 sqlconnection 對(duì)象指定 provider 屬性。)
* –或–
*
* 可以設(shè)置單個(gè)屬性(datasource、database、username 等等)。如果設(shè)置單個(gè)屬性,則將為您生成連接字符串。
* 注意 在連接字符串中存儲(chǔ)用戶(hù)名和密碼有安全性設(shè)置的意味。有關(guān)詳細(xì)信息,請(qǐng)參閱introduction to ado.net connection design tools。
*
*/
if(connstr.tolower().indexof("provider")==-1) provider.type=dbtype.sqlclient;
else provider.type=dbtype.oledb;
//throw new exception("here");
if(m_dbtype==dbtype.sqlclient)
{
conn=new system.data.sqlclient.sqlconnection(connstr);
}
else
{
conn=new system.data.oledb.oledbconnection(connstr);
}
}
catch(exception e)
{
string reason="(1)未設(shè)置數(shù)據(jù)庫(kù)連接字符串,請(qǐng)重新檢查連接字符串/r/n(2)目標(biāo)數(shù)據(jù)庫(kù)不存在,或者是沒(méi)有啟動(dòng)數(shù)據(jù)庫(kù)或者無(wú)法登錄;/r/n(3)連接字符串設(shè)置不正確,請(qǐng)按照標(biāo)準(zhǔn)的連接方式來(lái)寫(xiě)。/r/n";
throw new joybasedbexception(e.message,reason);
}
return conn;
}
}
}國(guó)內(nèi)最大的酷站演示中心!