闡述ADO.NET存儲過程優缺點
之前我們就ADO.NET存儲過程介紹過,但是我又看到了關于存儲過程的資料,這里就在深入的還大家討論一下吧。在應用Command對象時,其命令可以是存儲過程名稱。那么,什么是存儲過程?為什么要使用存儲過程?首先,看看存儲過程的定義。將常用的或很復雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來,被存儲起來的就是存儲過程。那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
ADO.NET存儲過程的優缺點:
◆存儲過程的主要優點體現在:
◆減少網絡傳輸,節約時間
◆速度快
◆出錯的概率小
◆可利用服務器的一些特殊的資源
◆存儲過程的主要缺點體現在:
◆交互性差
◆不夠靈活
◆商業邏輯層與數據庫在一起,不易移植
存儲過程主要致命的缺點就是:可能如果要更換數據庫(比如:從sql server到oracle)的話,你的存儲過程就都要重寫了。所以它過分依賴數據庫端,假如你要做一個工程,是可以的,但是如果你要做一個產品,或者以后可能還會用到這個工程的代碼的話,建議少使用。所以任何一種開發方法總有優缺點,不要過分依賴它。
在應用程序中,通常會大量使用ADO.NET存儲過程,這是因為:
第一,維護方便:如果你把所需要執行的操作代碼寫在程序當中,那么要做一些小修改,也要對程序做修改并重新編譯,對于用戶來講,這個時候就需要對程序加以深度測試(你說只修改了一點點,但是用戶不會為你的一句話而冒風險的),存儲過程相對來講就簡單得多,畢竟邏輯上分離出來了,即使要進行審核,成本也遠比程序要低得多;
第二,重用性:一個設計好的存儲過程,任何符合其輸入和輸出的程序都可以共用,同樣也改善了維護工作,如果有10個程序要用到這個存儲過程,那要做些修改,自然修改一個存儲過程所花費的成本比程序要低得多;
#T#第三,分工的明確化:存儲過程如果設計得當,就可以通過一個中間的適配器(Adapter)來調用,如此在將來進行數據庫的遷移等,就可以把相應的工作交給具體的熟悉相關數據庫等業務的人員,而不是所有的開發人員都要進行了解。就好比MSSQL/Oracle/DB2類似的,如果數據庫操作腳本寫在程序當中,那么遷移的工作量將會是所有可能的程序。如果是通過存儲過程,那就可以交給相應的DBA等來完成;
第四,預編譯提高效率:存儲過程的預編譯,可能性使得語句的執行更優化,特別是對于類似Oracle等具備某些高級優化能力的,那么包括其既定的執行計劃等可以帶來相當的性能提升;
第五,對于需要多次訪問數據的復雜操作:如果寫在程序當中,那么就需要不斷的或者大量的提取數據庫中的數據到程序中進行運算,而如果是使用存儲過程,那么就減少了應用程序與數據庫的交互次數,如此的消耗明顯要低得多。