c#中的數(shù)據(jù)庫(kù)訪問(wèn)工廠
看到一個(gè)兄弟的文章,很辛苦的想實(shí)現(xiàn)不改代碼只改配置來(lái)訪問(wèn)不同類型的數(shù)據(jù)庫(kù),自己去實(shí)現(xiàn)工廠模式。精神可嘉,但是殊不知c#已經(jīng)自己為不同類型數(shù)據(jù)庫(kù)的訪問(wèn)做了一個(gè)工廠。在這里我就把使用工廠的例子貼出來(lái)供不知道的兄弟參考一下,高手們可以忽略了。
首先是配置文件:其中的providerName就是指定的不同數(shù)據(jù)庫(kù)類型
<connectionStrings>
<add name="..." connectionString=" ..." providerName="System.Data.OleDb" />
<add name="..." connectionString=" ..." providerName="System.Data.SqlClient" />
</connectionStrings>
下面看一下使用工廠的這個(gè)類:
class DataBaseFac
{
private DbConnection cnn;//抽象類型
private DbCommand cmd;//抽象類型
private DbProviderFactory provider;
public DataBaseFac()
{
//從配置文件中取出標(biāo)示數(shù)據(jù)庫(kù)類型的字符串
string providerName = ConfigurationManager.ConnectionStrings[1].ProviderName;
//根據(jù)上一部的結(jié)果工廠創(chuàng)建一個(gè)對(duì)應(yīng)的實(shí)例
provider = DbProviderFactories.GetFactory(providerName);
//使用該實(shí)例就可以創(chuàng)建對(duì)應(yīng)的connection,command和adapater對(duì)象了
//調(diào)試的時(shí)候可以看到這幾個(gè)對(duì)象都變成了相應(yīng)于數(shù)據(jù)庫(kù)類型的
cnn = provider.CreateConnection();
cnn.ConnectionString = ConfigurationManager.ConnectionStrings[1].ConnectionString;
cmd = provider.CreateCommand();
cmd.Connection = cnn;
}
//執(zhí)行一次查詢,返回?cái)?shù)據(jù)表
public DataTable ExcuteQuery(string queryString)
{
DataTable result = new DataTable();
DbDataAdapter adapter = provider.CreateDataAdapter();
cmd.CommandType = CommandType.Text;
cmd.CommandText = queryString;
adapter.SelectCommand = cmd;
try
{
cnn.Open();
adapter.Fill(result);
}
catch
{
result = null;
}
finally
{
cnn.Close();
}
return result;
}
以上只是簡(jiǎn)單的應(yīng)用,并沒(méi)有做比較高級(jí)的封裝,只供不太了解的兄弟們參考。
總結(jié):順便說(shuō)說(shuō),用swith case語(yǔ)句來(lái)實(shí)現(xiàn)不同的創(chuàng)建connection ,command 和adapater的方法,然后說(shuō)是工廠方法的實(shí)現(xiàn)。其實(shí)這是完全錯(cuò)誤的,工廠模式的提出就是為了避免這么多swith case造成的麻煩。這次就為大家簡(jiǎn)單介紹到這,以后有時(shí)間我會(huì)把幾個(gè)常用的模式的提出原因和應(yīng)用場(chǎng)合總結(jié)一下用C#做幾個(gè)例子給大家做一個(gè)詳細(xì)的介紹,供大家學(xué)習(xí)參考。
【編輯推薦】