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