巧學(xué)ADO.NET DataAdapter參數(shù)使用
大家對(duì)與ADO.NET都有一定的了解,這里我們一起來(lái)看看關(guān)于ADO.NET DataAdapter參數(shù)的知識(shí)要領(lǐng)。DbDataAdapter具有四個(gè)用于從數(shù)據(jù)源檢索數(shù)據(jù)和更新數(shù)據(jù)源中數(shù)據(jù)的屬性:SelectCommand 屬性返回?cái)?shù)據(jù)源中的數(shù)據(jù);InsertCommand、UpdateCommand 和 DeleteCommand 屬性用于管理數(shù)據(jù)源中的更改。
調(diào)用 DataAdapter 的 Fill 方法之前必須設(shè)置 SelectCommand 屬性。在調(diào)用 DataAdapter 的 Update 方法之前必須設(shè)置 InsertCommand、UpdateCommand 或 DeleteCommand 屬性,具體取決于對(duì) DataTable 中的數(shù)據(jù)做了哪些更改。
例如,如果已添加行,在調(diào)用 Update 之前必須設(shè)置 InsertCommand。當(dāng) Update 正在處理已插入、已更新或已刪除的行時(shí),DataAdapter 將使用相應(yīng)的 Command 屬性來(lái)處理該操作。有關(guān)已修改行的當(dāng)前信息將通過(guò) Parameters 集合傳遞到 Command 對(duì)象。
當(dāng)更新數(shù)據(jù)源中的行時(shí),將調(diào)用 UPDATE 語(yǔ)句,該語(yǔ)句使用唯一標(biāo)識(shí)符來(lái)標(biāo)識(shí)該表中要更新的行。該唯一標(biāo)識(shí)符通常是主鍵字段的值。UPDATE 語(yǔ)句使用的參數(shù)既包含唯一標(biāo)識(shí)符又包含要更新的列和值,如下面的 Transact-SQL 語(yǔ)句所示。
- UPDATE Customers SET CompanyName = @CompanyName
- WHERE CustomerID = @CustomerID
ADO.NET DataAdapter參數(shù)占位符的語(yǔ)法取決于數(shù)據(jù)源。此示例顯示 SQL Server 數(shù)據(jù)源的占位符。使用問(wèn)號(hào) (?) 占位符代表 System.Data.OleDb 和 System.Data.Odbc 參數(shù)。
在此 Visual Basic 示例中,CompanyName 字段使用 CustomerID 等于 @CustomerID 參數(shù)值的行中的 @CompanyName 參數(shù)值來(lái)進(jìn)行更新。這些參數(shù)使用 SqlParameter 對(duì)象的 SourceColumn 屬性從已修改的行中檢索相關(guān)信息。下面是上一示例 UPDATE 語(yǔ)句的參數(shù)。代碼假定變量 adapter 表示有效的 SqlDataAdapter 對(duì)象。
- adapter.Parameters.Add( _
- "@CompanyName", SqlDbType.NChar, 15, "CompanyName")
- Dim parameter As SqlParameter = _
- adapter.UpdateCommand.Parameters.Add("@CustomerID", _
- SqlDbType.NChar, 5, "CustomerID")
- parameter.SourceVersion = DataRowVersion.Original
#T#Parameters 集合的 Add 方法接受參數(shù)的名稱(chēng)、數(shù)據(jù)類(lèi)型、大?。ㄈ绻m用于該類(lèi)型)以及 DataTable 中的 SourceColumn 的名稱(chēng)。請(qǐng)注意,@CustomerID 參數(shù)的 SourceVersion 設(shè)置為 Original。這樣可以保證,如果標(biāo)識(shí)列的值已經(jīng)在修改后的 DataRow 中被更改,就一定會(huì)更新數(shù)據(jù)源中的現(xiàn)有行。在這種情況下,Original 行值將匹配數(shù)據(jù)源中的當(dāng)前值,而 Current 行值將包含更新的值。沒(méi)有設(shè)置 @CompanyName 參數(shù)的 SourceVersion,而將使用默認(rèn)的 Current 行值。
對(duì)于 DataAdapter 的 Fill 操作和 DataReader 的 Get 方法,都將從 .NET Framework 數(shù)據(jù)提供程序中返回的類(lèi)型來(lái)推斷 .NET Framework 類(lèi)型。推斷的 .NET Framework 類(lèi)型和 Microsoft SQL Server、OLE DB 和 ODBC 數(shù)據(jù)類(lèi)型的訪問(wèn)器方法在 ADO.NET 中的數(shù)據(jù)類(lèi)型映射 中說(shuō)明。
SourceColumn 和 SourceVersion 可以作為ADO.NET DataAdapter參數(shù)傳遞給 Parameter 構(gòu)造函數(shù),也可以設(shè)置為現(xiàn)有 Parameter 的屬性。SourceColumn 是將要從中檢索 Parameter 值的 DataRow 中的 DataColumn 的名稱(chēng)。SourceVersion 指定 DataAdapter 用于檢索該值的 DataRow 版本。