學(xué)習(xí)了解DataAdapter類屬性
DataAdapter類代表了微軟數(shù)據(jù)訪問模型的一個(gè)新概念。DataAdapter類在ADO和DAO中并沒有真正的對(duì)應(yīng)類,當(dāng)然,可以認(rèn)為ADO Command 對(duì)象和DAO QueryDef對(duì)象與DataAdapter對(duì)象多少有一些聯(lián)系,它們?cè)粍h除過。
DataAdapter對(duì)象充當(dāng)數(shù)據(jù)庫和ADO.NET對(duì)象模型中非連接對(duì)象之間的橋梁。DataAdapter對(duì)象類的Fill方法提供了一種高效機(jī)制,用于將查詢結(jié)果引入DataSet或DataTable中,以便能夠脫機(jī)處理數(shù)據(jù)。還可以利用DataAdapter對(duì)象向數(shù)據(jù)庫提交存儲(chǔ)在DataSet對(duì)象中的掛起更改。
ADO.NET DataAdapter類公開了大量屬性,這些屬性實(shí)際上是Command對(duì)象。例如,SelectCommand屬性包含一個(gè)Command對(duì)象,該對(duì)象表示將用來填充DataSet對(duì)象的查詢。DataAdapter類還有UpdateCommand,InsertCommand和DeleteCommand等屬性,它們分別對(duì)應(yīng)于用來向數(shù)據(jù)庫提交已修改數(shù)據(jù)行、新建數(shù)據(jù)行或被刪除數(shù)據(jù)行的Command對(duì)象。
這些Command對(duì)象提供了更新功能,在ADO和DAO的Recordset對(duì)象中,這些更新自動(dòng)進(jìn)行。例如,當(dāng)在ADO中運(yùn)行一個(gè)查詢以生成一個(gè)Recordset對(duì)象時(shí),ADO的游標(biāo)引擎就會(huì)詢問數(shù)據(jù)庫中有關(guān)此查詢的元數(shù)據(jù),以確定結(jié)果來自哪里。然后ADO會(huì)使用該元數(shù)據(jù)建立更新邏輯,以將Recordset對(duì)象中的更改轉(zhuǎn)換為數(shù)據(jù)庫中的更改。
那么ADO.NET的DataAdapter對(duì)象為什么擁有單獨(dú)的UpdateCommand,InsertCommand和DeleteCommand屬性呢?這是為了允許開發(fā)人員定義自己的更新邏輯。ADO和DAO的更新功能都十分有限,DataAdapter類因?yàn)檫@兩種對(duì)象模型都將Recordset中的更改轉(zhuǎn)換為對(duì)數(shù)據(jù)庫中的表進(jìn)行直接引用的操作查詢。DataAdapter類為了維護(hù)數(shù)據(jù)的安全性和完整性,許多數(shù)據(jù)庫管理員都限制對(duì)其數(shù)據(jù)庫中表的訪問,因此更改表內(nèi)容的***途徑就是調(diào)用存儲(chǔ)過程。#t#
ADO和DAO不知道如何使用存儲(chǔ)過程提交更改,也沒有提供可讓開發(fā)人員指定自己更新邏輯的機(jī)制。ADO.NET DataAdapter則可以。利用DataAdapter對(duì)象,可以設(shè)置UpdateCommand,InsertCommand以及DeleteCommand屬性來調(diào)用存儲(chǔ)過程,c如前文所述,DataAdapter類會(huì)填充DataSet對(duì)象中的表,而且能讀取緩存的更改并將其提交給數(shù)據(jù)庫。DataAdapter有一些支持屬性,可用來跟蹤在什么位置發(fā)生了什么操作。TableMappings集合就是其中的一個(gè)屬性,它用于跟蹤數(shù)據(jù)庫中的哪個(gè)表與DataSet對(duì)象中的哪個(gè)表相對(duì)應(yīng)。每個(gè)表映射都有一個(gè)用于映射列的類似屬性,稱為ColumnMapping集合。