日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

打造自己的数据访问层(三)

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打造自己的数据访问层(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇打造自己的數據訪問層(二)中,我們已具體實現了數據訪問層對應的功能,該進行收尾工作了,先來看段代碼,試試上一篇實現的功能:
View Code string sqlText = "SELECT ID, NAME, VAL FROM TEST";
string columns = "ID, NAME, VAL";
DataSet ds
= new DataSet();
DataExecutor execObj
= new MSSqlExecutor();
DataMapping map
= new DataMapping();
map.ExecuteObject
= execObj;
map.TableName
= "TEST";
map.KeyColumns
= "ID";
map.Columns
= "ID, NAME, VAL";
DataMapping map
= new DataMapping(execObj.GetInstant(), "TEST", "ID", columns);
map.Fill(sqlText,
"TEST");
map.SetCommands(DataCommandType.Insert
| DataCommandType.Update | DataCommandType.Delete, ds);
//DataTable方式進行增、刪、改
bool isSuccess = execObj.Update();
果然已經完成了對數據庫的讀寫操作了,至少不用再寫大段的參數傳遞代碼,功能都已經實現了,是不是就完成了?
仔細看看上面的代碼,實際上還有問題尚未解決,看看這句:
DataExecutor execObj = new MSSqlExecutor();
竟然在代碼里直接實例化一個MSSql的執行對象,這樣一開始提出的數據庫之間的切換問題根本就沒有從本質上解決。
再回過頭來看上一篇,有一個方法public IDbConnection GetConn(),用來獲取數據連接對像,之前并沒有說明其如何實現。
我們知道DBConnection有兩個關鍵信息:
1、與哪種類型的數據庫產生連接,這個前面已經解決了。
2、傳遞與數據庫連接的帳號信息、訪問庫信息的ConnectionString,這個并沒有提及。
看看第二點以前是怎么做的:
View Code public IDbConnection GetConn()
{
if (conn != null)
{
return conn;
}

conn
= new SqlConnection();
conn.ConnectionString
= 連接字串;
return conn;
}

上面出現了連接字串,這個字串從哪來?

總結下,要完成最終的數據訪問輸出,還需要解決兩個問題:
1、動態進行不同數據庫之間的切換。
2、解決數據連接字串的來源問題。

接著就來解決這兩問題,先解決第二個問題,有個比較簡單的方法,將連接字串寫入配置文件中去,數據訪問層只需知道它傳遞過來KEY值:
<appSettings>
<add key="ConnStr" value="server=.;uid=sa;password=123456;database=DATA_BASE;max pool size=300"/>
</appSettings>
第一個問題解決了,只剩下最后一個問題了,如何動態切換不同的數據庫,也就是說,在使用的時候不需要自己NEW一個對象,而是通過第三方來創建一個對象,實際上,設計模式里已提出了方案,創建型模式,有興趣的朋友可以自行研究,我們這里只需要用到簡單工廠模式:
View Code public sealed class ExecutorFactory
{
public static DataExecutor Create()
{
return Create(DatabaseType.MSSql);
}

public static DataExecutor Create(DatabaseType dbType)
{
AbstractDataBase dataBase
= null;
Switch(dbType)
{
case DatabaseType.MSSql:
dataBase
= new MSSqlDataBase();
break;
case DatabaseType.Oracle:
dataBase
= new OracleDataBase();
break;
}

return dataBase.Create();
}
}

現在可對這句代碼進行替換了:DataExecutor execObj = new MSSqlExecutor();
替換為:DataExecutor execObj = ExecutorFactory.Create();
至此,問題都解決了,切換數據庫是只需更改DatabaseType為相應的數庫類型。?
接下來再考慮下,如果改變數據庫類型也不需要變動程序,能不能實現?
還是利用配置文件,只是此時提供的不是類型字串,而是實際的數據執行者程序集信息,再利用.NET的天然優勢反射可以實現了。
最終配置文件為:
<appSettings>
<add key="ConnStr" value="server=.;uid=sa;password=123456;database=DATA_BASE;max pool size=300"/>
<add key="DBExecutor" value="FM.DataAccess, FM.DataAccess.MappingExcuter.MSSqlExecutor"></add>
</appSettings>
改造后的工廠:
View Code public sealed class ExecutorFactory
{
public static DataExecutor Create()
{
return Create(null);
}

public static DataExecutor Create(string dataBaseTypeKey)
{
return Create(dataBaseTypeKey, null);
}

public static DataExecutor Create(string dataBaseTypeKey, string connStrKey)
{
if (string.IsNullOrEmpty(dataBaseTypeKey))
{
dataBaseTypeKey
= "DBExecutor";
}

string[] sltDataBaseType = ConfigReader.Read(dataBaseTypeKey).Split(',');
string asselblyName = sltDataBaseType[0];
string nameSpace = sltDataBaseType[1].Trim();
Assembly assembly
= Assembly.Load(asselblyName);
DataExecutor execObj
= assembly.CreateInstance(nameSpace) as DataExecutor;
execObj.SetConnectionString(connStrKey);

return execObj;
}
}


到此為止,數據訪問層最終完成,當然這里還有很多問題有待解決,但其基本框架已形成了,以此為依據,根據業務變化,實現自己的擴展,不斷更新,最終才能真正形成完善的數據訪問層。

下面提供本文的示例代碼:
?數據訪問層示例

轉載于:https://www.cnblogs.com/FlySoul/archive/2011/05/08/2040292.html

總結

以上是生活随笔為你收集整理的打造自己的数据访问层(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕2区 | 久久综合久久鬼 | 国产伊人久久 | 久久99久久99精品免观看软件 | 成人在线视频一区 | 国产高清免费 | 色香蕉av| 黑人黄色一级片 | 上原亚衣av一区二区三区 | 激情欧美一区二区三区 | 波多野结衣在线观看一区二区 | 久久人人爽人人爽人人片 | 欧美日韩你懂的 | 婷婷精品进入 | 国产精品久久中文字幕 | 国产一区视频在线观看免费 | 看全黄大色黄大片 | 在线日韩国产 | 日本不卡高字幕在线2019 | 少妇高潮久久久 | 婷婷视频网| 亚洲国产精品成人综合久久久 | 久久中字 | 成人黄色在线免费观看 | 国产乱码精品一区二区三 | 一级片少妇 | 日韩精品欧美精品 | 99ri精品| 成人动漫免费在线观看 | 朝鲜美女黑毛bbw | www欧美视频 | 日韩精品一区三区 | 亚洲综合色婷婷 | 91精品免费看 | 在线观看三级视频 | 精品无人国产偷自产在线 | 国产精品免费一区二区 | 一级特黄aaa大片 | 蜜臀久久99精品久久久画质超高清 | 一区二区三区四区精品 | 午夜啊啊啊 | a∨色狠狠一区二区三区 | 亚洲天堂网在线视频 | 亚洲aaaaaa| 欧美精品在线观看视频 | 91全免费 | 欧美大尺度做爰啪啪床戏明星 | 欧美成人国产精品高潮 | 三级网站免费看 | 在线观看麻豆视频 | 成人精品毛片 | 污污视频在线 | 中文字幕av二区 | 天天射天天| 青青青青在线 | 国产高清免费在线播放 | 强侵犯の奶水授乳羞羞漫虐 | 欧美整片在线观看 | 高清日韩 | 成人香蕉视频 | 综合成人 | 1024亚洲| 精品人妻无码一区二区色欲产成人 | 日韩色黄大片 | 成人福利片 | 精品国产一区二区不卡 | 少妇久久久久 | 天天综合色网 | 国产小视频免费在线观看 | 妞干网av| 黄av网| 亚洲熟妇一区二区三区 | 99久久国产宗和精品1上映 | 色欲国产精品一区二区 | 成人一区二区三区视频 | aav在线| 亚洲 欧美 激情 另类 | 波多野结衣中文字幕一区二区三区 | 亚洲国产成人va在线观看天堂 | 欧美体内谢she精2性欧美 | 五月婷婷深深爱 | 久久网一区二区 | 强伦人妻一区二区三区 | 亚洲最大黄网 | 国产chinese男男gaygay视频 | 久久久ww| 在线免费看黄 | 国产精品综合 | 成人免费视频国产免费麻豆 | 国产制服丝袜 | 丁香六月婷婷综合 | 欧美精品电影一区二区 | 久久超| aaaa毛片 | 5个黑人躁我一个视频 | 黄色国产在线播放 | 久久精品色欲国产AV一区二区 | 中文字幕一区二区三区不卡 | 国产精品一区无码 |