亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

ado.net快速上手疑問及解答
來源:易賢網(wǎng) 閱讀:1449 次 日期:2014-08-20 13:57:39
溫馨提示:易賢網(wǎng)小編為您整理了“ado.net快速上手疑問及解答”,方便廣大網(wǎng)友查閱!

一、代碼中的問題

1、偽SqlMapper的基類為什么用抽象類BaseSqlMapper而不用接口?

答:樓豬也知道在IBatis下的SqlMapper的基類就是一個接口ISqlMapper,但是樓豬寫代碼的時候,發(fā)現(xiàn)泛型約束在抽象基類里寫一次,在SqlMapper下就不要再寫了,而用接口就必須寫兩遍約束。呵呵,一時偷懶的后果,沒有深刻意識到“針對接口編程”這一條常識,提出這個問題的童鞋明顯可以看出技高樓豬一籌啊,,哈哈,樓豬吸取這個教訓了,本文最后的demo樓豬將BaseSqlMapper統(tǒng)一換成了ISqlMapper接口,請留意。

2、在前臺頁面里面寫SQL語句太多,是不是不太好?

這個問題也很好。在實際的項目中,SQL語句通常都寫在具體的Dao文件中,比如前文demo中提到的PersonDao類。我們在添加一個Person的時候,示例中是通過view plaincopy to clipboardPRint?

public int Insert(string sqlInsert)

public int Insert(string sqlInsert)

這種形式的方法執(zhí)行插入的,但是在實際項目中的時候,我們通常都會寫view plaincopy to clipboardprint?

public int Insert(Person model)

public int Insert(Person model)

這種類型的方法執(zhí)行數(shù)據(jù)庫插入操作。所以在前臺(表現(xiàn)層)寫SQL語句其實是不合理的。再次多多感謝指出代碼問題的童鞋們。如果已經(jīng)對某些新手造成某些誤導,樓豬在這里要深刻反省和檢討(demo寫的明顯有點隨意和偷懶),在這里,樓豬鄭重提醒,SQL語句的位置請不要模仿demo中這種糟糕的寫法,樓豬也是過來人,因為使用Batis.net的時候都是放在Dal層xml下的,請務(wù)必重視起來。

二、疑問(直接摘錄郵件內(nèi)容)

1、“數(shù)據(jù)庫切換貌似沒有是吧.怎樣切換MSSQL。ACC,XML等等呢”?

答:這個應該是說源碼對多種數(shù)據(jù)庫的支持問題。哦,樓豬還沒有實現(xiàn)??丛创a,Sql Server簡單的基本的CRUD功能已經(jīng)支持了。如果要擴展支持其他數(shù)據(jù)庫,模仿SqlServer類里的具體實現(xiàn)即可。樓豬的機器環(huán)境上沒有安裝Oracle或者MySQL等數(shù)據(jù)庫,所以寫完了也不好測試。您如果條件具備,自己可以試著完成它。至于說數(shù)據(jù)庫的切換,理想狀態(tài)的實現(xiàn)莫過于最經(jīng)典的抽象工廠模式,呵呵,配置文件配合反射就行了。但是樓豬建議您簡單使用偽SqlMapper進行數(shù)據(jù)庫類型切換。具體操作,其實只要在配置文件appsetting中加一個數(shù)據(jù)庫類型節(jié)點sqlType,配合類里的常用數(shù)據(jù)庫類型的枚舉即可。

<appSettings>

<add key="db_timeOut" value="5000"/>

<!--數(shù)據(jù)庫類型 0 SqlServer 1 Orcale 2 MySql-->

<add key="sqlType" value="0"/>

</appSettings>

枚舉如下:

代碼

namespace AdoNetDataaccess.Mapper

{

public enum SqlEnum

{

Default = 0,

SQLServer = 0,

Oracle = 1,

MySql = 1

}

}

然后,就是一些實例化SqlMapper的過程判斷了,將數(shù)據(jù)庫切換的問題完全轉(zhuǎn)移到實例化SqlMapper上來:

代碼

using System;

using System.Collections.Generic;

using System.Configuration;

namespace AdoNetDataAccess.Mapper

{

using AdoNetDataAccess.Core.Contract;

using AdoNetDataAccess.Core.Implement;

#region enum

public enum SqlEnum

{

Default = 0,

SQLServer = 0,

Oracle = 1,

MySql = 1

}

#endregion

public sealed class MapperUtill

{

#region fields

public static string currentSqlKey = "sqlConn";

public static int cmdTimeOut = 15;

private static int sqlType = 0;//數(shù)據(jù)庫類型 0 SqlServer 1 Orcale 2 MySql

private static readonly object objSync = new object();

private static readonly IDictionary<string, ISqlMapper> dictMappers = new Dictionary<string, ISqlMapper>();

#endregion

#region constructor and methods

private MapperUtill()

{

}

static MapperUtill()

{

try

{

cmdTimeOut = int.Parse(ConfigurationManager.AppSettings["db_timeOut"]);

}

catch

{

cmdTimeOut = 15;

}

try

{

sqlType = int.Parse(ConfigurationManager.AppSettings["sqlType"]);

}

catch (Exception ex)

{

throw ex;

}

//實例化SqlDbMapper

for (int i = 0; i < ConfigurationManager.ConnectionStrings.Count; i++)

{

string key = ConfigurationManager.ConnectionStrings[i].Name;

string value = ConfigurationManager.ConnectionStrings[i].ConnectionString;

CreateMapper(key, value, cmdTimeOut);

}

}

 

public static ISqlMapper GetSqlMapper(string key)

{

return MapperUtill.GetMapper(key);

}

public static ISqlMapper GetCurrentSqlMapper()

{

return MapperUtill.GetMapper(currentSqlKey);

}

public static void CreateMapper(string connKey, string sqlConStr, int connTimeOut)

{

IDbOperation operation = null;

switch (sqlType)

{

default:

case 0:

operation = new SqlServer(sqlConStr, connTimeOut);

break;

case 1:

//operation = new Orcale(sqlConStr, connTimeOut);//Orcale 未實現(xiàn)

break;

case 2:

//operation = new MySql(sqlConStr, connTimeOut);//MySql 也沒有實現(xiàn)呢

break;

}

if (operation == null)

{

throw new Exception("您配置的數(shù)據(jù)庫類型有可能那啥出問題了");

}

SqlMapper mapper = new SqlMapper(operation);

dictMappers.Add(connKey.ToUpper().Trim(), mapper);//不區(qū)分大小寫

}

public static ISqlMapper GetMapper(string sqlConKey)

{

if (string.IsNullOrEmpty(sqlConKey))

{

throw new Exception("數(shù)據(jù)庫連接字符串主鍵為空!");

}

sqlConKey = sqlConKey.ToUpper();//不區(qū)分大小寫

ISqlMapper mapper = null;

if (dictMappers.ContainsKey(sqlConKey))

{

mapper = dictMappers[sqlConKey];

}

else

{

throw new Exception(string.Format("沒有{0}所對應的數(shù)據(jù)庫連接", sqlConKey));

}

return mapper;

}

/// <summary>

/// 釋放所有

/// </summary>

public void Release()

{

foreach (KeyValuePair<string, ISqlMapper> kv in dictMappers)

{

SqlMapper mapper = kv.Value as SqlMapper;

if (mapper == null)

{

continue;

}

mapper.CurrentDbOperation.CloseConnection();

}

dictMappers.Clear();

}

#endregion

}

}

必須要注意,這里的數(shù)據(jù)庫切換方式不是絕對的,您可以按照自己喜歡的習慣的其他方式編程完成切換,樓豬這里只是拋磚而已。

2、“我對ORM不熟悉,想問下您的這個ORM到底是節(jié)省了哪部分工作? 我看里面有大量的反射,這樣是不是非常影響效率?”

首先,樓豬對ORM也不太熟悉?,F(xiàn)在實現(xiàn)的這個嚴格來說也根本談不上算是ORM,但是有樓豬自己使用過的兩個ORM的影子。

其次,當前實現(xiàn)的東東不是為了節(jié)省哪部分工作而設(shè)計的,樓豬的初衷是重讀ado.net經(jīng)典紅皮書而做的復習筆記。

第三,反射相對于沒有使用反射,當然非常影響效率。需要說明的是,要不要使用反射應該根據(jù)實際的項目需要。根據(jù)樓豬個人開發(fā)經(jīng)驗,對于大多數(shù)程序員要實現(xiàn)的簡單的常見的前后臺mis系統(tǒng),在保證基本需求的情況下,客戶如果對效率沒有意見,用用沒有太大關(guān)系,大部分工作就交給服務(wù)器完成去吧,程序員不用做太多工作。但是對于訪問頻繁的大型網(wǎng)站,實時系統(tǒng)或者應對大數(shù)據(jù)量操作的系統(tǒng)等等,建議不要使用反射,而且可能要重點花精力在數(shù)據(jù)“裝潢”上面。

最后,如果有童鞋對ORM感興趣,不妨在網(wǎng)上搜搜大牛們的作品,大名鼎鼎的NHibernate,iBatis.net,WebSharp,LINQ等等(這么多ORM,一個一個都要熟悉,源碼也研究不過來啊,建議新手熟練一兩種足矣),也許對您有更多的啟發(fā)。如果您自己實現(xiàn)了類似其他流行ORM的主流功能(如自動生成SQL語句或者通過XML配置,緩存,延遲加載等等),并且功能更加強大,用起來更加順手方便的新ORM,呵呵,真誠期待您的功德圓滿那一天早日到來,快點來造福萬千程序員吧。

更多信息請查看IT技術(shù)專欄

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機網(wǎng)站地址:ado.net快速上手疑問及解答
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
久久精品女人| 亚洲高清免费| 久久久久国产一区二区| 夜夜爽www精品| 最新国产拍偷乱拍精品| 激情综合在线| 欧美日韩亚洲一区| 欧美日韩一区在线播放| 久久五月天婷婷| 久久婷婷麻豆| 狼狼综合久久久久综合网 | 亚洲综合欧美日韩| 亚洲高清资源| 日韩亚洲国产欧美| 99re6热在线精品视频播放速度| 亚洲黄色一区二区三区| 亚洲精品影院| 午夜一级久久| 欧美精品国产一区| 国内不卡一区二区三区| 日韩午夜在线电影| 亚洲欧美日韩国产综合精品二区| 久久亚洲精品欧美| 伊人激情综合| 亚洲专区欧美专区| 亚洲一区二区动漫| 久久精品一区二区国产| 欧美日韩一区二区视频在线 | 欧美一区久久| 在线观看亚洲| 日韩亚洲精品在线| 国产亚洲二区| 欧美 亚欧 日韩视频在线| 欧美日韩国产在线一区| 亚洲精品精选| 欧美日韩高清在线一区| 一本久道久久久| 欧美精品v日韩精品v国产精品| 黄色成人精品网站| 91久久久久| 欧美欧美全黄| 一区二区三区欧美在线| 久久久精品五月天| 激情欧美一区| 久久久久久久久久码影片| 亚洲性感美女99在线| 国产女优一区| 在线免费观看欧美| 欧美成人69| 中日韩视频在线观看| 国产精品jizz在线观看美国| 日韩亚洲精品在线| 一区二区av| 国产精品xvideos88| 欧美特黄一区| 亚洲网站啪啪| 亚洲青涩在线| 国产精品免费一区二区三区观看| 亚洲无吗在线| 国产精品试看| 久久伊人一区二区| 黄页网站一区| 亚洲乱码视频| 亚洲一区网站| 国产伦一区二区三区色一情| 亚洲成人自拍视频| 亚洲视频播放| 久久久久久自在自线| 久久久综合网| 亚洲午夜精品一区二区| 国产日韩一区二区三区在线| 蜜桃av久久久亚洲精品| 欧美日本二区| 一区二区激情| 性感少妇一区| 在线欧美三区| 欧美 日韩 国产 一区| 雨宫琴音一区二区在线| 久久aⅴ国产紧身牛仔裤| 欧美视频网站| 噜噜噜噜噜久久久久久91| 黄色综合网站| 欧美一区二区三区在线播放| 亚洲精品看片| 欧美日韩国内| 久久精选视频| 一区二区三区欧美成人| 欧美日韩网址| 久久久久综合| 亚洲主播在线| 一本色道久久综合亚洲二区三区| 欧美高清视频一区| 久久福利影视| 国产精品五区| 亚洲三级网站| 黑丝一区二区| 欧美日本不卡高清| 久久精品成人一区二区三区蜜臀| 亚洲第一区色| 国产在线不卡| 欧美日韩亚洲一区二区三区在线| 国产精品日韩一区二区三区| 韩国欧美一区| 欧美日韩在线一二三| 久久中文在线| 亚洲一区二区精品在线| aⅴ色国产欧美| 影院欧美亚洲| 激情婷婷欧美| 国产综合18久久久久久| 欧美福利电影在线观看| 久久国产日韩| 久久美女性网| 久久亚洲不卡| 欧美另类高清视频在线| 欧美精品综合| 韩国亚洲精品| 亚洲东热激情| 日韩一区二区免费看| 日韩视频在线播放| 国产日韩欧美精品| 免费在线欧美黄色| 蜜桃av综合| 久久久久高清| 欧美激情精品久久久六区热门| 免费看的黄色欧美网站| 久久精品国产清高在天天线| 久久精品男女| 国产精品v一区二区三区| 狠狠爱综合网| 亚洲视频二区| 欧美一区91| 国产精品v欧美精品v日韩精品| 国产一区视频观看| 日韩午夜激情| 美女精品在线| 激情文学一区| 国产日韩久久| 久久久久成人精品免费播放动漫| 老鸭窝毛片一区二区三区| 欧美在线网址| 99精品视频免费观看| 亚洲国产精品www| 99亚洲一区二区| 国产精品久久国产三级国电话系列| 国产乱码精品| 欧美日韩精品免费观看| 亚洲精品黄色| 久久精品成人| 日韩视频精品在线观看| 久久久噜噜噜| 韩日在线一区| 亚洲黄色天堂| 欧美精品观看| 在线亚洲欧美| 欧美日韩一卡| 国产精品色网| 在线日本成人| 欧美一区二区三区免费看| 亚洲激情二区| 欧美va天堂| 国产模特精品视频久久久久| 在线精品亚洲| 欧美日韩国产三区| 麻豆精品网站| 亚洲一区三区视频在线观看| 亚洲激情网站| 韩国一区二区三区在线观看| 麻豆九一精品爱看视频在线观看免费| 在线观看视频免费一区二区三区| 久久最新视频| 久久国产主播精品| 国产精品毛片| 国产日韩亚洲欧美精品| 亚洲激情精品| 亚洲国产一区二区精品专区| 欧美少妇一区| 欧美视频导航| 欧美视频官网| 欧美特黄视频| 国产精品国码视频| 欧美日韩第一区| 欧美日本一区二区视频在线观看 | 狠狠色噜噜狠狠色综合久| 美女久久网站| 久久国产日韩| 久久一二三四| 欧美高清日韩| 国产精品啊啊啊| 欧美日韩视频在线一区二区观看视频| 久久国产一二区| 久久综合九色综合久99| 欧美激情第二页| 欧美日韩国产亚洲一区| 欧美午夜一区| 亚洲激情精品| 国产久一道中文一区| 久久av二区| 欧美/亚洲一区| 欧美精品国产一区| 激情综合激情| 亚洲一级高清| 在线一区日本视频| 亚洲欧美日韩在线观看a三区| 久久国产精品亚洲77777| 久久久久免费| 永久久久久久| 性欧美xxxx大乳国产app| 久久男女视频| 伊人天天综合| 欧美专区一区二区三区| 欧美精品麻豆| 亚洲麻豆视频| 久久久久久久欧美精品| 欧美三区在线| 一区二区三区|亚洲午夜| 久久精品女人的天堂av| 国内激情久久| 国产精品久久久久久久久婷婷 | 国模大胆一区二区三区| 91久久精品www人人做人人爽| 国产女主播一区二区| 欧美日韩精品综合| 国产日韩一区二区三区| 欧美精品麻豆| 国产欧美在线| 国产一区二区三区四区三区四| 日韩视频三区| 欧美一区综合| 国产一级精品aaaaa看| 欧美日韩三级电影在线| 国产精品久久777777毛茸茸| 欧美喷水视频| 亚洲欧美视频一区二区三区| 欧美三级视频| 亚洲永久字幕| 亚洲人体偷拍| 红桃视频国产精品| 欧美1区2区视频| 午夜一区二区三区不卡视频| 国产一区视频在线观看免费| 亚洲一区二区动漫| 日韩午夜一区| 伊人久久av导航| 欧美日韩国产高清视频| 鲁鲁狠狠狠7777一区二区| 99成人在线| 在线欧美三区| 一区二区在线不卡| 狠狠色狠狠色综合人人| 欧美日韩亚洲一区| 欧美精品一区二区三区久久久竹菊| 国产亚洲一区在线| 一区二区三区三区在线| 亚洲欧洲一区二区天堂久久| 狠狠综合久久| 狠狠综合久久av一区二区老牛| 久久久久天天天天| 久久aⅴ国产紧身牛仔裤| 国产亚洲毛片| 国产精品久久久免费| 日韩视频不卡| 99精品视频免费全部在线| 一区三区视频| 亚洲精品一区二区三区av| 在线视频观看日韩| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美日韩在线精品| 欧美日韩综合精品| 海角社区69精品视频| 在线播放亚洲| av成人免费观看| 午夜一区不卡| 欧美日韩福利| 亚洲无线一线二线三线区别av| 亚洲一级一区| 亚洲激情一区| 性伦欧美刺激片在线观看| 在线成人av| 国产日韩亚洲欧美精品| 亚洲一区二区三区精品在线观看| 中日韩在线视频| 鲁大师影院一区二区三区| 女人香蕉久久**毛片精品| 国产精品二区三区四区| 99成人在线| 久久久久久久尹人综合网亚洲| 亚洲一区三区视频在线观看| 国产一区二区三区四区三区四| 国产精品女主播一区二区三区| 国产精品久久久亚洲一区| 久久精品一本| 亚洲天堂久久| 国产欧美一区二区三区国产幕精品| 国产精品有限公司| 欧美国产三区| 国产欧美一区二区色老头 | 亚洲黄色影院| 国产精品久久国产三级国电话系列 | 国产三级精品在线不卡| 久久国产66| 极品av少妇一区二区| 国产精品免费看| 国产精品啊v在线| 亚洲精品麻豆| 欧美a级片一区| 亚洲精品一区二区三区蜜桃久| 亚洲免费中文| 伊人狠狠色j香婷婷综合| 亚欧美中日韩视频| 亚洲高清在线播放| 美女精品一区| 日韩一级免费| 欧美日本中文| 美女国产精品| 国产欧美日韩亚洲| 韩日在线一区| 欧美fxxxxxx另类| 亚洲一区图片| 99精品欧美| 欧美一级一区| 欧美日韩国产综合网| 国产亚洲福利| 国产中文一区| 午夜精品美女久久久久av福利| 国产精品久久久久久模特 | 免费在线一区二区| 99热在线精品观看| 精品不卡一区二区三区| 亚洲欧美亚洲| 久久亚洲国产精品一区二区| 国产农村妇女毛片精品久久莱园子| 亚洲一级特黄| 黑丝一区二区| 国产尤物精品| 欧美日韩在线一二三| 老司机精品久久| 久久久久国产精品午夜一区| 国产精品一级久久久| 一本色道婷婷久久欧美| 亚洲精品麻豆| 99精品欧美一区二区三区| 亚洲高清激情| 99精品视频免费| 国产午夜精品一区二区三区欧美 | 黄色欧美成人| 国内精品美女在线观看| 欧美色综合网| 精品99视频| 日韩一级精品| 国产精品亚洲综合| 午夜宅男久久久| 久久最新视频| 国产精品va| 亚洲精品影视| 免费亚洲婷婷| 午夜视频一区| 在线观看一区欧美| 国产日韩1区| 久久久久一区二区三区| 欧美精品麻豆| 亚洲精品1区2区| 国产精品色网| 亚洲欧美亚洲| 亚洲激情一区二区三区| 国产精品呻吟| 欧美精品一区二区视频 | 日韩亚洲在线| 国产精品视频久久一区| 欧美 日韩 国产一区二区在线视频| 国产精品豆花视频| 亚洲色诱最新| 久久免费高清| 亚洲国产精品第一区二区| 国产精品资源| 欧美日韩三级| 国产亚洲高清视频| 欧美区亚洲区| 国产一区二区三区免费不卡 | 国语精品一区| 国产精品一级久久久| 欧美精品成人一区二区在线观看| 激情久久一区| 欧美一区二区| 国产欧美日韩亚洲| 国产综合18久久久久久| 国产视频精品网| 狠狠色狠狠色综合日日tαg| 亚洲在线不卡| 最新日韩av| 欧美日韩理论| 久久精品国产清高在天天线| 在线不卡欧美| 欧美日本韩国在线| 久久av在线| 国产日韩欧美一区在线| 在线观看欧美一区| 欧美婷婷久久| 欧美激情综合| 欧美一区1区三区3区公司 |