Asp.Net数据库编程-10条最优方法[翻译]
生活随笔
收集整理的這篇文章主要介紹了
Asp.Net数据库编程-10条最优方法[翻译]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Asp.Net數據庫編程-10條最優方法[翻譯]
原文標題:Using Data with ASP.Net - 10 of my 'Best Practices'原文鏈接:http://www.developerdotstar.com/community/node/531?(By?Chris Gaskell)
翻 譯:bigqiang(多多小蟲)
說 明:學習之用,翻譯未經原作者許可 完全不能說:任何嚴謹的程序員在他們的職業生涯中極少有時間處理數據庫編程。因此要求你涉及底層數據庫的代碼盡可能高效非常合理。希望能把我在應用ADO.Net編程時所了解的一些最佳編程方法與你分享。也希望你能在使用過程中發現和我所說的同樣有效。 最優方法 #1
使用內置.Net data providers 內置的.Net data providers允許你充分利用.Net框架特點以及高效發揮數據庫的潛力。 最優方法 #2
總是使用conifg文件保存數據庫連接字串。同時加密連接字串特別是數據庫位置不確定時。 在程序外部的數據庫可能會變動位置,這樣可以很容易的更改config文件中的連接字串。從安全角度講加密連接字串很明智。 最優方法 #3
優先作用SQL Server的排序方法,諸如:ORDER BY,HAVING 以及 GROUP BY 這些語句。 在服務器端執行排序而不是在客戶端,這會更節省時間,因為服務器端完成任務更快。 最優方法 #4
盡力設法限定返回結果集合的行數,具有代表性的方法是使用 TOP 關鍵詞,當然還有其它類似的方法。 限制發送信的息數據量程序會更快 最優方法 #5
當使用一個 Command 對象的 ExecuteReader 方法時,最好使用CommandBehavior.CloseConnection 這種方式提供了良好的連接池,能讓連接迅速打開和返回。 最優方法 #6
如果在關閉DataReader對象之前你就已經結束讀取不再想讀取更多記錄行的最好馬上取消讀取操作。 DataReader類的關閉方法最終關閉對象前會不斷讀取所有余下的記錄行。這太浪費資源。 最優方法 #7
最好使用參數化的command(通常是存儲過程)來處理動態的SQL查詢。 這會改善性能減少SQL注入攻擊的機會,同時你的代碼也更容易維護。 最優方法 #8
在處理50或50條以上的記錄行時最好對排序結果集進行分頁。 雖然多數情況下使用分頁技術不太容易,但是它能讓服務器端數據庫和客戶端應用程序減少任一時刻的開銷和網絡流量提高性能, 最優方法 #9
在所有記錄中加一個時間戳字段——我通常用‘creationdate’(創建日期)、‘lastupdate’(最后更新日期)字段。 數據庫內容被更新時,這會更容易檢查。同時也更容易檢查代碼與數據源互操作的正確性。 最優方法 #10
不要通過象 “SELECT * ”這樣的方式返回數據。 盡管一個“SELECT *”語句是編程最快速的寫法,但它肯定是返回所有記錄操作速度最慢的,難道你真的需要頻繁訪問所有列記錄嗎?請明確寫出你要訪問的列字段。 ============================= 譯文結束,以下是一些我看到的一些評論也一并翻譯出來: ------------- Phil(http://weblogs.asp.net/plip):
關于第5條,我更進一步。要確保你使用using語句
Using Conn As New SqlConnection()
using (SqlConnection Conn = new SqlConnection())
這會確保清空所有資源。 ------------- Michel(http://blogs.wdevs.com/qc/):
關于第6條“DataReader類的關閉方法最終關閉對象前會不斷讀取所有余下的記錄行”。你肯定嗎?我認為在Read()方法中就完成了這個工作。 ------------- Shahed Khan(http://geekswithblogs.net/shahed):
為了回答第10條“難道你真的需要頻繁訪問所有列記錄嗎?”,我想說有許多人在使用N層模型的業務對象中使用了所有的列字段并且填充大量的業務對象。
Chris Gaskell回復:我明白你所說的依據是什么,但是在你的業務DTO(譯者:詳細的試驗目標?)中你也要包括諸如“DateCreated”和“LastModified”這樣的字段嗎? ------------- David Parslow(http://parslow.spaces.msn.com/):
動態SQL查詢實現以參數化command的來改善性能(想象中優于存儲過程,但此處有爭議),減少了SQL注入攻擊的機會(因為它被參數化了),并且更容易維護代碼(可以和OR-Mapper或者類似的技術)。所遇到的這些問題應該是靜態查詢(這比較常見) Chris Gaskell回復:似乎我給動態SQL查詢一詞的定義并不清楚。請看下面的一個動態查詢示例(我想你能發現這和你的靜態查詢描述比較符合)
sql = @"SELECT Col1, Col2 FROM table WHERE id=" + id; ------------- Richard Jonas(http://www.richardjonas.com/blog):
我想補充一個方法:
建立一個有限數量SQL查詢列表,并把它保存在一個共用文件里,而不是讓這些查詢語句出現在所有代碼文件當中。 如果以后更改數據庫,這會產生一些問題,計劃中要更改所有影響SQL查詢的文件,如果把SQL查詢保存在一個共用文件里,并限制數量,這會減少更改量降低遺漏某些重要問題的風險。
總結
以上是生活随笔為你收集整理的Asp.Net数据库编程-10条最优方法[翻译]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【算法分析与设计】DFS与BFS的区别
- 下一篇: .Net开发中的多线程编程总结