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