1. 程式人生 > >.NET下,你採用的是哪種方式進行資料操作?

.NET下,你採用的是哪種方式進行資料操作?

進行資料庫進行更新操作時,有許多種方式,你使用的是哪種?

這裡假設一個數據庫中有一張表,表名為Test,列為colID,colTest1,colTest2,colTest3。其中,colTest1,colTest2,colTest3為nvarchar(50),而colID為int;

一、資料介面卡+型別化的資料集
     假設資料介面卡名為da1,資料集為ds1,資料集類為ds;

  方法1:直接操作的情況,利用Index來對Rows物件陣列物件定位,此做法比較常見。
       DataRow dr = ds.Tables[0].Rows[Index];
       dr["colTest1"] = "test";
       dr["colTest2"] = "test";
       dr["colTest3"] = "test";
       da.Update(ds);

       方法2:當已知主鍵ID的時候,利用型別化資料集的特點,進行操作,這是MSDN中ASP.NET更新資料的教程中的作法(DataGrid的資料更新)
       ds.TestRow row = ds.Test.FindByColID(id);
       row.colTest1 = "test";
       row.colTest2 = "test";
       row.colTest3 = "test";
       da.Update(ds);

      方法3:修改與刪除的時候,利用DataView做為中間橋樑,進行資料修改後,再Update.

       從寫程式碼的簡便性上來說,上面的方法二略優於方法一與方法三,利用visual studio.net的程式碼提示功能,可以提高一點效率。
  但使用資料集資料繫結後,使用Update操作資料庫時,很容易遇到一些奇怪的情況,往往在進行頻繁的Fill與Update的時候,資料集明明是發生了更改,但資料庫中的值卻沒有發生更改或出現同步錯誤,而且解決資料庫衝突,往往還要花費一些附加的程式碼,這些程式碼由於是在各個事件中填寫,使得程式碼在觀感上,更難於維護.並且大量的類例項的建立,對效能也往往為造成一些不可估計的衝擊.Visual Studio.Net的資料介面卡嚮導,往往又充當邪惡的角色,很容易勾引你使用它產生大量的垃圾程式碼.

二、資料介面卡+非型別化資料集
       方法1:建立一個空的DataSet資料集,直接用da.Fill(ds),來填充ds,讓它自動自成內部結構
       方法2:繼承DataSet類,然後手工填寫程式碼,產生具體的實體類,再進行操作(如Duwamish的作法)

       方法1是屬於,準備工作比較簡便,呼叫起來比較麻煩的,而方法2,是屬於做準備工作比較複雜雜的,呼叫起來比較輕鬆的那種。兩者的麻煩度差不多。

三、直接操作資料庫
       即建立一個Connection與Command,然後對資料進行操作,如果有必要的情況,使用引數化命令,當然本方式,也指使用儲存過程進行呼叫的情況。
  這種方法是最高效,粒度最細,控制最方便,使用上最安全的一種方法,但也是在code時最麻煩的一種,繁雜的CURD,可以讓開發者徹底陷入資料訪問的苦海,浪費大量的時間,極易讓人產生煩燥情緒。

四、採用Application Data Block
      方法一:直接使用微軟提供的Data Block,利用SqlHelper類直接進行資料操作
      方法二:也是使用微軟的Data Block,但按照自己的需要作過一定的更改(比如,設定公共的Connection屬性,以便不用每次都再寫一遍)

      相對來說,這類方法比直接操作資料庫的方式要輕鬆一些,對於Connection的開啟與關閉,幾乎可以不作考慮,而且在採用事務進行資料操作時,編寫程式碼將顯得更為輕鬆。

五、利用O/R Mapping,進行資料庫更新
  方法1:全部是由自己手寫程式碼或自己寫的元件
       方法2:採用商業元件,如Devexpress公司的XPO等
  方法3:採用開源元件,如Nhibernate 等
  
       這三種方法,都差不多,但從風險的角度考慮,方法2略優於另外兩個方案,方法1需要大量的測試與驗證,否則寫軟體時,不得不承擔附加的風險,而方法3,如果.NET下的開源元件像JAVA中的那麼成熟的話,是完全可以採用的,但目前在專案中使用Nhibernate,風險性還是比較大的。方案二中,由於有專業公司的維護,加上某些商業元件本身的成熟度,在一定的程度上可以減少風險。
  採用O/R Mapping,無疑是最快樂的開發方式,但是的目前的階段來說,目前在.NET下,採用O/R Mapping的方式寫程式碼,還是要冒一定的風險,而且效能上,也是被人所詬病的。

六、利用程式碼生成器
  方法一、完成使用程式碼生成器生成的程式碼或dll,對其進行呼叫。
  方法二、僅利用程式碼生成器產生儲存過程,經過測試後,然後自己手工寫程式碼呼叫。
  方法三、將程式碼生成的器的程式碼進行簡單修改後,對其進行呼叫。
     
  這可能是開發效率最高的方式了,但目前的程式碼生成器,在使用時,仍然是讓人提心吊膽的,風險度大大高於O/R mapping的方式,很多情況下,許多程式碼生成器,實際上就是自動生成一個O/R mapping層,用於隔離資料持久化與業務程式碼之間的屏障。雖然目前有不少看起來很不錯的生成器,但在使用時,還是要審慎一下才好。

  以上所列出來的幾種方法中,從最穩定的角度考慮,應該是三、四,如果幾類方法間有所結合,我得出的如下結論:
      (1) 綜合從效能的角度考慮,在有資料繫結的情況下,採用資料介面卡,進行資料填充與繫結,而資料庫的更新則採用三或四的方法,相對來說,比較理想.
      (2)如果採用O/R Mapping的方案,對於資料更新可以採用O/R的方案,但資料的查詢等,還是採用SQL的方法進行,而不要考慮物件查詢,可以大大地提高方案的可用性(該思想是progame告知的).

      這篇文章,是順手寫的,在思想上有些什麼不對之處,或者還有不完美善之處,希望大家能夠不吝賜教.

相關推薦

.NET採用的是方式進行資料操作

進行資料庫進行更新操作時,有許多種方式,你使用的是哪種?這裡假設一個數據庫中有一張表,表名為Test,列為colID,colTest1,colTest2,colTest3。其中,colTest1,colTest2,colTest3為nvarchar(50),而colID為int;一、資料介面卡+型別化的資料集

宏宇電商:當下流行的網絡推廣方式知道最有效?

網絡營銷隨著市場競爭的日益激烈,網絡推廣已成為各品牌或企業的一個重要營銷宣傳方式。雖然我們也經常會接觸到一些網絡推廣方式,但是究竟哪一種網絡推廣方式對企業來說才是最有效的呢?下面小編結合幾種當下流行的網絡推廣方式,根據他們的特點,為大家在網絡推廣過程中提供一些參考性的建議。 ??NO.1 SEO??SEO是指

項目風險管理手段常用

風險管理手段 風險管理手段,雖然有三種,但是根據實際情況,或許你常用的風險管理手段也就是一種。因為很多時候,相似的項目工程,遇到的風險有很多一部分類似。還有一個原因就是,人們習慣於應用自己熟悉的手段來處理問題。因為這樣子更省事,風險也更小。實際情況是不是這樣呢?這個很難一概而論。但是,每一個風險管

委托的N寫法喜歡

spa his gif 方法 泛型 copy sta line urn 一、委托調用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Progr

PDF文檔怎麽交換頁面知道方法簡單嗎?

http 鼠標 fff 文件夾 RoCE col 技術分享 就會 edit PDF文檔怎麽交換頁面呢?現在很多的PDF文件會出現頁面順序錯誤的情況,這個時候就需要將PDF文檔的頁面進行交換一下,想要交換PDF文檔頁面就需要使用到專業的PDF編輯器來進行操作,下面小編就為大家

Java多執行緒併發01——執行緒的建立與終止會幾方式

> 本文開始將開始介紹 Java 多執行緒與併發相關的知識,多謝各位一直以來的關注與支援。關注我的公眾號「Java面典」瞭解更多 Java 相關知識點。 # 執行緒的建立方式 在 Java 中,使用者常用的主動建立執行緒的方式有三種,分別是 **繼承 Thread 類**、**實現 Runnable 介面

遍歷 Dictionary會幾方式

## 一:背景 ### 1. 講故事 昨天在 StackOverflow 上看到一個很有趣的問題,說: 你會幾種遍歷字典的方式,然後跟帖就是各種奇葩的回答,挺有意思,馬上就要國慶了,娛樂娛樂吧,說說這種挺無聊的問題

挺全乎兒的Spring Boot 多環境配置都在這裡了喜歡

持續原創輸出,點選上方藍字關注我 目錄 前言Spring Boot 自帶的多環境配置 建立不同環境的配置檔案指定執行的環境 Maven 的多環境配置 建立多環境配置檔案定義啟用的變數pom 檔案中定義 profiles資源過濾總結 總結 前言 日常開發中至少有三個環境,分別是開發環境(dev),測試

在vc.net如何配置OpenOffice的SDK進行應用開發

這兩天一直在www.openoffice.org社群摸索,今天終於知道了在vc.net 2003下利用OpenOffice的SDK開發應用程式在這裡和大家共享。。。需求軟體:MS Visual C++ Net 2003 OpenOffice SDK Open

.NET Core 微信公眾號小程式6獲取UnionID方法知道

前言 獲取UnionID是開發微信公眾號/小程式中很有必要的一個環節,特別是針對一個公司擁有多個公眾號小程式而推出的機制,實現打通賬戶一體化,用UnionID來區分多平臺的唯一性。 官方的解釋:如果開發者擁有多個移動應用、網站應用、和公眾帳號(包括小程式),可通過 UnionID 來區分使用者的唯一性,因

人“cai”在兄弟連戰狼班Java培訓屬於?

心態 而且 心理 一點 四種 熱血 沒有 喜歡 這樣的 四種人“cai”在兄弟連戰狼班Java培訓,你屬於哪一種? 大家好, 俺叫劉小財,這個名字的是父母起的,俺覺得父母是這個意思,無論做什麽要給自己留一個後路。 俺來到兄弟連二個月,也慢慢適應了這裏的生活,每天都過

2分鐘精準鑒別初級、中級、高級程序員

為什麽 tinyproxy har bug 高級 業務 我會 sgx 是什麽 源 / 頂級程序員 文 / An先生 @jonde初級:產品是大爺中級:懟過產品高級:打過產品 初級:加班中級:不加班高級:你們加班 @sunsulei初級:嗯?中級:嗯。高級:嗯? @ti

型別的程式設計師屬於

在我的程式設計生涯中,我碰到過很多奇奇怪怪的對手和同盟。我把這些編碼戰士們分成五類,有些人是你隊伍中的好夥伴,有些人則是搗蛋者,讓你的每一個計劃都完不成。 不管怎麼說,他們在軟體開發的諸神殿上都佔有一席之地。如果你的團隊中沒有一個合適健康的比例,混合這些不同型別的程式設計師,要麼你會發現你的專案跌跌

一對一聊天系統核心功能實現方式有哪些方式可取?

一對一社交平臺我們可以在應用商店裡看到很多,他們都屬於一對一聊天系統的範疇,只是功能各異,各有各的產品定位及運營特色。然而它們有一個共同的核心功能:使用者間的一對一視訊(或語音)聊天。那麼各具特色的一對一聊天系統,它的核心功能是如何實現的呢? 常見的一對一聊天功能的實現方式有以下幾種: 1.

精準鑑別初級、中級、高階程式設計師

@jonde 初級:產品是大爺 中級:懟過產品 高階:打過產品   @PureWhiteWu  初級:加班 中級:不加班 高階:你們加班   @sunsulei 初級:嗯? 中級:嗯。 高階:嗯?

職場進階的10姿勢呢?

除了埋頭苦幹,你的職場晉升之路還剩下哪些優勢? 這個世界充滿假象,唯有痛苦從不說謊! 職場如戰場,本就是優勝劣汰適者生存,只會埋頭苦幹的人,不過算是機械式運作的流水線工人,做得再多,再努力認真,也不過是生產力較高的的優秀的機械式員工。 簡言之,誰敢指望一頭只會低頭幹活,

不同的程式設計師屬於?如果要裁員會讓誰走?

秋招剛過,網際網路上便掀起了程式設計師”縮招“的風波,傳言華為已經停止社招,BAT等Offer也遲遲沒有響應。2019年將近,網際網路公司開始有大動作了。作為生存率較低的群體,網際網路公司每年都會進行或少或多的裁員,不少大型網際網路公司都有著一套末尾淘汰制度(比

2分鐘精準鑑別初級、中級、高階程式設計師

源 / 頂級程式設計師    文 / An先生 @jonde 初級:產品是大爺 中級:懟過產品高階:打過產品 @PureWhiteWu   初級:加班 中級:不加班高階:你們加班 @sunsulei 初級:嗯? 中級:嗯。高階:嗯? @t

JAVA程式設計師分級屬於

初級—初 掌握java基礎,熟悉常用類庫。理解java web中的servlet,jsp,並瞭解常用的框架對java web的封裝原理,能夠藉助框架完成增刪改查功能。理解資料庫在web開發中的地位。

愛因斯坦說研究人員分為三

愛因斯坦說過:“研 究人員分為三種:一種人從事科學工作是因為科學工作給他們提供了施展他們特殊才能的機會,他們之所以喜好科學正如運動員喜好表現自己的技藝一樣;一種人把 科學看成是謀生的工具,如非機遇也可能成為成功的生意人;最後一種人是真正的獻身者。這種人為數不多,但對科學知識所