日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何打造自己的數(shù)據(jù)訪問(wèn)層三

上一篇如何打造自己的數(shù)據(jù)訪問(wèn)層二中,我們已具體實(shí)現(xiàn)了數(shù)據(jù)訪問(wèn)層對(duì)應(yīng)的功能,該進(jìn)行收尾工作了,先來(lái)看段代碼,試試上一篇實(shí)現(xiàn)的功能:

成都創(chuàng)新互聯(lián)專注于企業(yè)網(wǎng)絡(luò)營(yíng)銷推廣、網(wǎng)站重做改版、臨潭網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)成都做商城網(wǎng)站、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為臨潭等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

 
 
 
  1. string sqlText = "SELECT ID, NAME, VAL FROM TEST";  
  2. string columns = "ID, NAME, VAL";  
  3. DataSet ds = new DataSet();  
  4. DataExecutor execObj = new MSSqlExecutor();  
  5. DataMapping map = new DataMapping();  
  6. map.ExecuteObject = execObj;  
  7. map.TableName = "TEST";  
  8. map.KeyColumns = "ID";  
  9. map.Columns = "ID, NAME, VAL";  
  10. DataMapping map = new DataMapping(execObj.GetInstant(), "TEST", "ID", columns);  
  11. map.Fill(sqlText, "TEST");  
  12. map.SetCommands(DataCommandType.Insert | DataCommandType.Update | DataCommandType.Delete, ds);  
  13. //DataTable方式進(jìn)行增、刪、改  
  14. bool isSuccess = execObj.Update(); 

果然已經(jīng)完成了對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)操作了,至少不用再寫(xiě)大段的參數(shù)傳遞代碼,功能都已經(jīng)實(shí)現(xiàn)了,是不是就完成了?

仔細(xì)看看上面的代碼,實(shí)際上還有問(wèn)題尚未解決,看看這句:

 
 
 
  1. DataExecutor execObj = new MSSqlExecutor(); 

竟然在代碼里直接實(shí)例化一個(gè)MSSql的執(zhí)行對(duì)象,這樣一開(kāi)始提出的數(shù)據(jù)庫(kù)之間的切換問(wèn)題根本就沒(méi)有從本質(zhì)上解決。

再回過(guò)頭來(lái)看上一篇,有一個(gè)方法public IDbConnection GetConn(),用來(lái)獲取數(shù)據(jù)連接對(duì)像,之前并沒(méi)有說(shuō)明其如何實(shí)現(xiàn)。

我們知道DBConnection有兩個(gè)關(guān)鍵信息:

1、與哪種類型的數(shù)據(jù)庫(kù)產(chǎn)生連接,這個(gè)前面已經(jīng)解決了。

2、傳遞與數(shù)據(jù)庫(kù)連接的帳號(hào)信息、訪問(wèn)庫(kù)信息的ConnectionString,這個(gè)并沒(méi)有提及。

看看第二點(diǎn)以前是怎么做的:

 
 
 
  1. public IDbConnection GetConn()  
  2. {  
  3.     if (conn != null)  
  4.     {  
  5.         return conn;  
  6.     }  
  7.     conn = new SqlConnection();  
  8.     conn.ConnectionString = 連接字串;  
  9.     return conn;  

上面出現(xiàn)了連接字串,這個(gè)字串從哪來(lái)?

總結(jié)下,要完成最終的數(shù)據(jù)訪問(wèn)輸出,還需要解決兩個(gè)問(wèn)題:

1、動(dòng)態(tài)進(jìn)行不同數(shù)據(jù)庫(kù)之間的切換。

2、解決數(shù)據(jù)連接字串的來(lái)源問(wèn)題。

接著就來(lái)解決這兩問(wèn)題,先解決第二個(gè)問(wèn)題,有個(gè)比較簡(jiǎn)單的方法,將連接字串寫(xiě)入配置文件中去,數(shù)據(jù)訪問(wèn)層只需知道它傳遞過(guò)來(lái)KEY值:

 
 
 
  1.  
  2.       
  3.  

***個(gè)問(wèn)題解決了,只剩下***一個(gè)問(wèn)題了,如何動(dòng)態(tài)切換不同的數(shù)據(jù)庫(kù),也就是說(shuō),在使用的時(shí)候不需要自己NEW一個(gè)對(duì)象,而是通過(guò)第三方來(lái)創(chuàng)建一個(gè)對(duì)象,實(shí)際上,設(shè)計(jì)模式里已提出了方案,創(chuàng)建型模式,有興趣的朋友可以自行研究,我們這里只需要用到簡(jiǎn)單工廠模式:

 
 
 
  1. public sealed class ExecutorFactory  
  2. {  
  3.     public static DataExecutor Create()  
  4.     {  
  5.         return Create(DatabaseType.MSSql);  
  6.     }  
  7.     public static DataExecutor Create(DatabaseType dbType)  
  8.     {  
  9.         AbstractDataBase dataBase = null;  
  10.         Switch(dbType)  
  11.         {  
  12.             case DatabaseType.MSSql:  
  13.                 dataBase = new MSSqlDataBase();  
  14.                 break;  
  15.             case DatabaseType.Oracle:  
  16.                 dataBase = new OracleDataBase();  
  17.                 break;  
  18.         }  
  19.         return dataBase.Create();  
  20.     }  

現(xiàn)在可對(duì)這句代碼進(jìn)行替換了:DataExecutor execObj = new MSSqlExecutor();

替換為:DataExecutor execObj = ExecutorFactory.Create();

至此,問(wèn)題都解決了,切換數(shù)據(jù)庫(kù)是只需更改DatabaseType為相應(yīng)的數(shù)庫(kù)類型。

接下來(lái)再考慮下,如果改變數(shù)據(jù)庫(kù)類型也不需要變動(dòng)程序,能不能實(shí)現(xiàn)?

還是利用配置文件,只是此時(shí)提供的不是類型字串,而是實(shí)際的數(shù)據(jù)執(zhí)行者程序集信息,再利用.NET的天然優(yōu)勢(shì)反射可以實(shí)現(xiàn)了。
最終配置文件為:

 
 
 
  1.  
  2.       
  3.       
  4.    

改造后的工廠:

 
 
 
  1. public sealed class ExecutorFactory  
  2.     {  
  3.         public static DataExecutor Create()  
  4.         {  
  5.             return Create(null);  
  6.         }  
  7.         public static DataExecutor Create(string dataBaseTypeKey)  
  8.         {  
  9.             return Create(dataBaseTypeKey, null);  
  10.         }  
  11.         public static DataExecutor Create(string dataBaseTypeKey, string connStrKey)  
  12.         {  
  13.             if (string.IsNullOrEmpty(dataBaseTypeKey))  
  14.             {  
  15.                 dataBaseTypeKey = "DBExecutor";  
  16.             }  
  17.             string[] sltDataBaseType = ConfigReader.Read(dataBaseTypeKey).Split(',');  
  18.             string asselblyName = sltDataBaseType[0];  
  19.             string nameSpace = sltDataBaseType[1].Trim();  
  20.             Assembly assembly = Assembly.Load(asselblyName);  
  21.             DataExecutor execObj = assembly.CreateInstance(nameSpace) as DataExecutor;  
  22.             execObj.SetConnectionString(connStrKey);  
  23.             return execObj;  
  24.         }  
  25.     } 

到此為止,數(shù)據(jù)訪問(wèn)層最終完成,當(dāng)然這里還有很多問(wèn)題有待解決,但其基本框架已形成了,以此為依據(jù),根據(jù)業(yè)務(wù)變化,實(shí)現(xiàn)自己的擴(kuò)展,不斷更新,最終才能真正形成完善的數(shù)據(jù)訪問(wèn)層。


本文題目:如何打造自己的數(shù)據(jù)訪問(wèn)層三
瀏覽地址:http://www.5511xx.com/article/dphppsh.html