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

來源:互聯網
上載者:User
ado

一段時間以來,預存程序一直是公司專屬應用程式程式開發資料訪問的首選方法。預存程序的安全性更高、封裝能力更強,並能執行複雜的邏輯,且不會打亂應用程式代碼。但是,它也存在一些缺點:

• 開發人員傾向於在預存程序中加入商業邏輯。

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

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

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

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

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

如何應用參數化查詢

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

圖A 參數化查詢

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

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

圖B 整個命令

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

參數化查詢的缺點

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

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

何時應使用參數化查詢?

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

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

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



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。