深度剖析ADO.NET屬性分析研究
由于VS2003安裝程序太多,此處無(wú)法上傳,所以大家有communitysever的可以從里面獲得然后反編譯為自己所用,沒有的就到網(wǎng)絡(luò)上搜下吧,有許多資源呢!下面進(jìn)行詳細(xì)說明介紹。
首先ADO.NET中使用了DataAdapter 來(lái)處理和數(shù)據(jù)庫(kù)聯(lián)機(jī)和脫機(jī)當(dāng)時(shí)開發(fā)人員設(shè)計(jì)了DataAdapter是為了能夠處理脫機(jī)數(shù)據(jù)方便操作有關(guān)這點(diǎn)只要其Fill思路方法即可,這時(shí)會(huì)在DataSet中創(chuàng)建個(gè)新名為“Table“DataTable.
要重新指定名可用DataAdapter.Fill(DataSet,“Tabelname“)此時(shí)connection也關(guān)閉了DataAdapter既可以用來(lái)提交查詢并將結(jié)果存儲(chǔ)到DataSet中也可以用來(lái)向數(shù)據(jù)庫(kù)傳遞更改僅僅使用其Update思路方法即可達(dá)到向數(shù)據(jù)庫(kù)提交存儲(chǔ)地DatSet中更改#t#
DataAdapter將查詢結(jié)果存儲(chǔ)在DataSet或DataTable對(duì)象中當(dāng)執(zhí)行這過程時(shí)候DataAdapter使用了個(gè)Command來(lái)和數(shù)據(jù)庫(kù)通訊并在內(nèi)部使用了DataReader來(lái)獲取查詢結(jié)果***才將結(jié)果復(fù)制到DataSet新行中去這也是Fill過程如果有兩個(gè)DataAdapter對(duì)象都使用相同Connection對(duì)象在創(chuàng)建時(shí)候就會(huì)創(chuàng)建兩個(gè)Connection對(duì)象而不是同個(gè)這種情況解決方案是:
- SqlConnection con= SqlConnection(\"server=localhost;database=Northwind;Trusted_Connection=Yes;\")
- SqlDataAdapter da= SqlDataAdapter(\"select CategoryID,Description from Categories\",con);
- SqlDataAdapter da= SqlDataAdapter(\"select CategoryID,Description from Customers\",con);
而不是將查詢串單獨(dú)寫成行有時(shí)候可能并不希望ADO.NET中架構(gòu)和數(shù)據(jù)庫(kù)中架構(gòu)相同這種情況解決方案的是可以采用別名思路方法即select id as Product ID,amount as Product Amount from product;另外種解決方案就是使用DataAdapter提供TableMappings集合機(jī)制通過它就可以將查詢結(jié)果映射到DataSet結(jié)構(gòu)中這種思路方法更方便更靈活TableMappings屬性返回個(gè)DataTableMappingsCollection對(duì)象。
其中包含了組DataTableMappings只要DataSet中相應(yīng)表名稱和數(shù)據(jù)庫(kù)中表名相同即可以使用它來(lái)創(chuàng)建個(gè)映射(DataSet中可以有多個(gè)表)TableMappings里還有個(gè)ColumnMappings屬性其使用方法和TableMappings相似其原理是DataAdapter從數(shù)據(jù)庫(kù)讀取數(shù)據(jù)后利用ADO.NET從結(jié)果集中獲取列名稱有點(diǎn)特別要注意即只能獲取列名稱ADO.NET而無(wú)法獲取表名稱DataAdapter事先假定表名稱為Table,接著遇到映射語(yǔ)句則進(jìn)行表映射不說了看代碼:
- con= SqlConnection(\"server=localhost;database=Northwind;Trusted_Connection=Yes;\");
- da= SqlDataAdapter(\"select top 50 CustomerID,CompanyName from Customerswhere CustomerID>\'BOTTM\'\",con);
- ds= DataSet;
- da.Fill(ds,\"Categories\");
- this.DataGrid1.DataSource=ds.Tables[\"Categories\"];this.DataGrid1.DataBind;
- con.Close;