編制ADO.NET參數調用介紹
Command.Prepare方法能夠提高數據源中重復的參數化命令的性能。Prepare指示數據源為多個調用優化特定的命令。為了加大工作上的效率,必須確定下什么是ADO.NET參數調用。
明確地指定大綱和元數據
在ADO.NET參數中當用戶沒有指定元數據信息時,有很多對象推導這些信息。例如:
DataAdapter.Fill方法,如果不存在的話,它在記錄集中建立表和列。 CommandBuilder,它為單個的SELECT語句生成數據適配器命令屬性。 CommandBuilder.DeriveParameters,它組合Command對象的Parameters集合。
但是每次使用這些特性時都會造成效率降低。我們推薦主要在設計時和ad-hoc應用程序中使用這些特性。在可能的情況下,ADO.NET參數明確地指定大綱和元數據,包括在數據集中定義表和列,定義數據適配器的Command屬性,定義Command的Parameter信息。
ExecuteScalar和ExecuteNonQuery
如果你希望返回單個值,例如Count(*)、 Sum(Price)、或者Avg(Quantity),你可以使用Command.ExecuteScalar。ExecuteScalar返回第一行第一列的值,返回結果集是數量值。ExecuteScalar通過一步完成不僅簡化了代碼而且提高了性能,而這些工作在使用DataReader時將需要兩個處理步驟。
當使用不返回行的SQL語句時,類似修改數據(例如插入、更新或者刪除)或者只返回輸出參數或值,使用ExecuteNonQuery。ADO.NET參數通過建立一個空DataReader刪除了任何必要的處理。 #t#
ADO.NET參數空值的檢測
如果數據庫的某張表的一個列允許空值,你不能使用某個與空值相等的參數來測試它。作為代替,需要編寫一個WHERE子句來檢測是否列和參數都是空值。下面的SQL語句返回LastName列與賦予@LastName的值相同的行,或者LastName 列和ADO.NET參數都為空的行:
- SELECT * FROM Customers
- WHERE ((LastName = @LastName) OR (LastName IS NULL AND @LastName IS NULL))