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告知的).
這里假設一個數據庫中有一張表,表名為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告知的).
轉載于:https://www.cnblogs.com/9who/archive/2008/07/28/1254624.html
總結
以上是生活随笔為你收集整理的NET下,你采用的是哪种方式进行数据操作?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 忍辱负重的小白兔们 - 验收准则的意义
- 下一篇: linux添加用户