一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

重溫數據庫訪問——故事篇

  本文想借用故事的方式來說一下ADO.NET的工作方式。雖然現在都ORM了,但是了解一下ADO.NET還是有必要的。

  在茫茫的大海上有許多的島,其中一個島的名字叫做“應用程序島”。這座島上商業非常發達,高樓大廈、店鋪林立。但是島的面積不夠大,沒有地方建立倉庫。所以市長決定,把臨近的一座小島開發出來,專門作為數據倉庫來使用,這座島的名字就叫“數據庫島”。

  市長在數據庫島上面建立了一個MSSQL數據庫,這樣各個商場、超市就可以把自己的貨物放進去了。兩個島相鄰很近,為了便于運輸,所以直接在兩個島之間建立了五座大橋。并且成了一個“數據訪問池”的部門來專門管理這五座橋。

  有一個叫command的家伙很聰明,覺得商機來了,于是他就成立了一家Command物流公司,專門負責兩座島之間的貨物運輸。物流公司成立了幾個下屬部門:Connection、DataReader。Connection負責與連接池的聯系,申請大橋的臨時使用權,并且還要提供車輛。DataReader負責裝卸貨物。

  好了,萬事具備只欠東風。物流公司成了好了之后就坐等客戶上門了。不久來了一位客戶,是島上的一個書店,他們購進了一批圖書,需要送到數據庫島的倉庫里。

  【添加記錄的情況】

  Command接到了這個任務很高興,終于開張了。領導當然不能自己親自去干活了,于是派出了明星員工cm007來負責這個任務。

  SqlCommand cm007 = new SqlCommand();

  Cm007從書店那里得到了指令(就是SQL語句)和貨物,來到Connection部門。

  cm007.CommandText = "";

  Connection部門派出了得力員工cn007

  SqlConnection cn007 = new SqlConnection();
  cm007.Connection = cn007;

  cn007開著車,帶著cm007來到了大橋,由cn007和連接池聯系,想要申請一座大橋的臨時使用權。

  cn007.Open();

  連接池得到了這個申請之后,查看了一下大橋的使用情況,現在五座大橋都沒有人使用,于是把001號大橋的使用權交給了cn007。這個時候,這座001號大橋就由cm007他們獨占了,其他任何人都不可以使用。而且是按照獨占時間來收取費用的。

  一行人通過001號大橋來到了數據庫,cm007把指令交給了數據庫管理員開始交貨。數據庫管理員按照指令,把貨物放到了指定的位置。辦好之后cm007帶著數據庫的確認證明,從大橋返回到了應用程序島。離開大橋后,cn007又給連接池發了一個申請。

  cn007.Close();

  連接池得到了這個申請后,收回了001號大橋的使用權,這樣其他人就又可以使用這個大橋了。

  cm007一行人來到了書店,把數據庫管理員的證明交給了書店,客戶很滿意,這個任務也就完成了?;氐轿锪鞴窘徊?。

  cn007.Dispose();

  cm007.Dispose();

  command很高興,首戰告捷,以后的生意一定會很紅火呀。

  【提?。ú樵儯┯涗洠蛏蠈又苯臃祷谼ataReader的情況】

  第二天,那家書店又來找command,要從數據庫島提五本書過來。又來生意了,太好了,于是又派出了cm007和cn007。不過這次和昨天不太一樣,昨天是送貨到倉庫,今天是從倉庫提貨。這次還需要DataReader派裝卸工來配合。

  輕車熟路,cn007開著車帶著大家來到了大橋,cn007申請了一座大橋的使用權,來到了數據庫島,cm007把指令交給了數據庫管理員開始提貨。不過這次卻遇到了一點小問題,運輸車的運載量的太小了,一次只能運一本書(一條記錄)??墒沁@次卻需要提五本書(五條記錄),沒辦法,只好多跑幾趟了。

  帶上一本書(一條記錄),來到了書店,書店老板很高興,這么快就到了呀,趕快卸貨上架吧。咦等等,怎么只有一本書呀。Cm007只好解釋,我們的車運載量太小了,一次只能運一條記錄,不過速度還是很快的呀。

  書店老板想了想,也湊合了,那你們趕快運下一條記錄吧。

  如是這般,折騰了五趟,總算把貨物全都運完了。

  “等等”,cn007說,“大橋的使用權還沒有交回去呢。”于是大家又來到了橋頭,把使用權交了回去。

  最后回到物流公司交差。

  【改進,向上層返回DataTable】

  這回command可高興不起來了。大橋是按照占用時間來收費的,這么來回折騰,大橋的占用時間明顯變長了,這就增加了成本呀。另外現在汽油這么貴,來回折騰燒的可都是錢呀,就不能跑一趟多運點嗎?

  于是command把大家召集過來一起商量這個事情。cn007說,大橋這一段沒有什么辦法可想了,一次只能運出來一條記錄,這個也不知道是誰規定的,我們也改不了。不過從橋頭到客戶那里我們倒是可以想想辦法,我有一個朋友,DataAdapter,他們也許會有辦法。Command聽了也沒有什么其他的方法,那就把DataAdapter請過來,一起商量一下吧。

  第二天,DataAdapter過來了,也帶來了他的解決方案。其實也很簡單,他們公司可以提供集裝箱(就是DataTable),在橋頭等待,貨物運到的時候由DataReader裝到集裝箱里,然后立刻返回運第二批貨物。等需要的貨物全都裝完了之后,在開著集裝箱運到客戶那里。

  SqlDataAdapter da007 = new SqlDataAdapter();

  DataTable dt007 = new DataTable();

  da007.Fill(dt007);

  這樣就節省了大橋的占用時間,節省了成本。到客戶的這段路程,集裝箱跑一趟就可以了,省油。

  這個方案不錯,command欣然接受。

  過了幾天,書店又要提一批圖書,這次采用了集裝箱的方案,果然大大節省了成本,客戶也很滿意,雖然一開始要等待比較長的時間,但是好在一次性就可以得到全部的貨物。

  【多種返回類型:DataRow、object[]、object】

  有一天又發現了一個新問題,書店只要一本書。就一本書,也弄一個集裝箱?太浪費了吧。怎么辦?干脆直接用DataRow吧。實在不行用object[]。對于一條記錄也足夠用了。

  【實體類開始登場】

  于是物流公司的生意是越來越紅火了。有一家大型超市也找到了command,希望能夠為超市運輸貨物。這可是一比大買賣呀,command當然是很高興。大家一拍即合。

  一開始合作的也很愉快,但是過了幾天出現了一點小問題。

  【DataTable的缺點】

  超市的老板找到了command,“你們的集裝箱確實挺好,但是有一個小問題呀。他們的樣子都是一模一樣的,只能通過外面的標簽來區分里面的貨物,這個太不方便了,而且還容易出錯,昨天本來想運一批‘微波爐’,結果標簽寫錯了,寫成了‘光波爐’。幸好發現的及時,否則就賠大發了。你們能不能想個好點的辦法呢?”。

  command心想:“你們把標簽寫錯了,和我有什么關系呢?”不過客戶就是上帝呀,得罪不起,還得想個辦法解決一下。

  于是又把大家都召集過來一起商議。只是這次并沒有上次那么順利,想了不少辦法,但是都不理想。正在一籌莫展的時候,面向對象公司的推銷員來了。

  【實體類來了】

  面向對象的推銷員知道了這個問題后笑了(來生意了呀,哈)。“這個正是我們的優勢呀,相對于集裝箱(DataTable)的容易出錯這個缺點,我們推出來‘實體類’,這種新型的集裝箱,是根據不同的貨物量身定做的,微波爐的實體類只能裝微波爐,光波爐的實體類只能裝光波爐,冰箱的實體類只能裝冰箱……而且他們的外形也和獨特,一眼就能看出來,很好區分。”

  Command一聽,這個好哇,正愁這件事情呢,太好了。“我們正在和一家大型超市合作,他們的貨物有很多的種類,每一類都定制一個實體類,這樣不就不會出錯了嗎?哈哈??彀殉欣习逭襾硪黄鹕套h一下。”

  【不僅實體類來了,還帶來了一批專門的裝卸工人】

  但是事實和理想總是有那么一點差距。以前用集裝箱(DataTable)的時候,結構是一樣的,DataAdapter只需要一種工人就可以完成裝卸的工作,但是采用實體類之后,就必須按照實體類的各自的特點來找人。

  能夠給冰箱實體類裝貨物的工人,不能給電視實體類裝貨物,因為兩種實體類的結構是不一樣的。同理也不能給其他實體類裝卸貨物。這樣就需要很多工人,一批工人專門裝卸冰箱實體類,另一批工人專門裝卸電視實體類……。

  問題還不只這些,一開始超市大量提取CRT顯示器,但是過了一段時間基本不提取CRT顯示器的,因為被液晶顯示器代替了。Command本來想去掉CRT的實體類和其裝運工人,但是超市說了,雖然現在不怎么賣CRT了,但是還是有需求的呀。你裁掉了,下個月想運CRT顯示器怎么辦呀?

  這樣成本就又上來了。而且很可能養著一批工人,但是他們又沒什么事情可干。

  Command愁壞了,想要改回集裝箱,但是客戶又不同意,實體類很好用呀,你怎么可以改回不好用的集裝箱呢?

  這可怎么辦?成本居高不下,快賠死了。

  【“反射”登場了】

  這時候又來了一個推銷員。(怎么推銷員這么多呢?)

  這次是反射公司的推銷員,他帶來了一個叫做“反射”的東東,用了這個就不怕不同類型的實體類了,因為用了反射,同一批工人就可以給不同類型的實體類賦值了,不在需要向以前那樣,不同的實體類需要不同的工人了。

  太好了,這樣就不需要那么多不同類型的工人了,成本又可以降低下來了。

  故事就先到這里吧,再往下就應該說一說反射的效率問題了,但是這方面我還沒有做過測試,理論上更是不清楚。所以就先不說了。

  這個只能算是故事梗概吧,讀起來很是干干巴巴的,沒什么味道。俺語文沒學好,文筆很差。這里表達的重點有兩個。

  一個是Connection和連接池的關系,Connection、Command、DataReader、DataAdapter他們的關系。我把Command看成了一個大的容器,在故事里是一個物流公司,其他的是下屬部門或者是合作伙伴。

  另一個是DataTable和實體類。只是這一點說得并不是很詳細,他們的優缺點說得也不多。

  目前就只想到了這些。后一篇就是代碼篇了。

NET技術重溫數據庫訪問——故事篇,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产在线观看精品一区二区三区91 | 美国三级日本三级久久99 | 国产成人精品免费视频大全可播放的 | 免费亚洲网站 | 国产亚洲精品视频中文字幕 | 2021国产在线视频 | 涩涩爱网站 | 亚洲成综合人影院在院播放 | 精品一二区 | 精品视频免费在线观看 | 好好的日视频www | 亚洲精品9999久久久久 | 麻豆91视频 | 精品99视频 | 四虎永久免费网站免费观看 | 精品视频一区二区三区在线播放 | 国产女主播喷出白浆视频 | 2021精品国内一区视频自线 | 久久老司机波多野结衣 | 色yeye成人免费视频 | 91在线精品| 思思久久这里只精品99re66 | 久久亚洲伊人中字综合精品 | 一区二区不卡在线观看 | 亚色影视 | 中文字幕一区视频 | 免费国产午夜高清在线视频 | 国内第一永久免费福利视频 | 四虎国产精品免费久久久 | 成人在线综合网 | 日本人真淫视频一区二区三区 | 男人插女人视频网站 | 91免费看视频 | 成人免费看视频 | chinese国产在线视频 | 色婷婷av777 色婷婷成人 | 色啦啦 | 久草热视频在线观看 | 国产成人精品免费大全 | 欧美一级特黄特黄做受 | 国产资源视频在线观看 |