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