在ADO.NET中用參數化查詢縮短開發時間 - .net語言 -

在ADO.NET中用參數化查詢縮短開發時間

時間:2013-07-24 12:29:04   來源:   評論:加載中...   點擊:加載中...
一段時間以來,存儲過程一直是企業應用程序開發數據訪問的首選方法。存儲過程的安全性更高、封裝能力更強,并能執行復雜的邏輯,且不會打亂應用程序代碼。但是,它也存在一些缺點: • 開發者傾向于在存儲過...

一段時間以來,存儲過程一直是企業應用程序開發數據訪問的首選方法。存儲過程的安全性更高、封裝能力更強,并能執行復雜的邏輯,且不會打亂應用程序代碼。但是,它也存在一些缺點:

• 開發者傾向于在存儲過程中加入商業邏輯。

• 更改過程時必須改變開發環境。

• 查找過程所需的參數比較費時。

• 許多時候,存儲過程提供的功能超出所需。

嵌入到應用程序代碼中的內聯SQL代碼是數據訪問的另一個常見方法。雖然企業在開發過程中很少用到這種方法,但許多小型項目應用這種類型的數據訪問方法。應用內聯SQL可以實現快速開發,但它并不具有存儲過程的安全與封裝優勢。

參數化查詢介于存儲過程與內聯SQL之間。它為數據訪問程序開發提供一種安全、封裝性的方法,并允許你利用內聯SQL的快速開發優勢。

如何應用參數化查詢

應用參數化查詢并不那么容易。例如,下面的代碼(圖A)說明如何編寫參數化查詢:

在ADO.NET中用參數化查詢縮短開發時間

                                                                   圖A 參數化查詢

在這個例子中,我們選擇所有具有指定CustomerID的用戶。注意,這個過程與在一個存儲過程中編寫Select語句十分相似。其不同在于你將它直接嵌入你的應用程序代碼或源文件中。(我們稍后再討論源文件。)

為使ADO.NET能夠移植@CustomerID參數,你只需簡單建立一個正常的SqlParameter并將它加入到當前命令的SqlCommand.Parameters集中。然后你就可在希望的連接上執行命令,ADO.NET則建立在SQL服務器上執行的命令。下面的代碼片斷(圖B)是一個說明如何建立并執行整個命令的例子:

在ADO.NET中用參數化查詢縮短開發時間

圖B 整個命令

如你所見,建立并執行參數化查詢是一個非常簡單的過程。在數據訪問庫——如微軟的數據應用程序塊——的輔助下,這個過程可以進一步簡化。

參數化查詢的缺點

說到編程,每種方法都有其優缺點,決定應用參數化查詢也不例外。它的一個主要的缺點在于:由于查詢被嵌入到應用程序代碼中,可能在幾個地方都以同樣的查詢結束。我可以建立一個存儲查詢的中心位置來消除這種重復。這個位置可以是一個XML文件、在應用程序中的一個帶公共靜態字符串成員的類、一個自定義的.NET屬性、或者是一個空文件。應用這些技巧,你就可以在執行前查找到所需的查詢。

應用參數化查詢的另一個潛在問題是許多公司并不允許在其應用程序(以及數據層)中使用內聯SQL。我認為這是因為人們在談論將SQL插入應用程序代碼時,他們指的是特別(內聯)代碼,而不是參數化查詢。這樣的規則也使DBA對在SQL服務器上執行代碼有了更大的控制權,這對大型數據庫十分有利。

何時應使用參數化查詢?

在任何需要在SQL服務器上執行操作的情況下,你都可以應用參數化查詢。但是,參數化查詢主要應用于需要執行的創建、閱讀、更新與刪除(CRUD)操作。如果你在執行需要較長時間或由不同SQL語句構成的復雜操作,最好將此操作保留在SQL服務器中。

雖然參數化查詢在許多情況下應用起來十分方便,但由于它可能會打亂你的應用程序代碼,所以我并不推薦你在復雜的數據操作邏輯中應用它。當你的應用程序代碼被打亂時,你必然會遇到嚴重的代碼維護問題。

在編寫數據訪問程序的許多情況下,與特別查詢與存儲過程相比,參數化進程不失為一個較好的選擇。參數化查詢介于其他兩種選擇之間,如果應用得當,能夠顯著提高開發效率。



相關熱詞搜索:

 
上一篇:Login控件:用戶登錄失敗的消息提示
下一篇:使用.NET實現你的IP切換器
收藏 將此文推薦給朋友
分享到:
10个数复式三中三多少组公式