文章目錄
- ADO.NET的架構
- 串連提供者類
- DataSet
- DataAdapter
在這一章,我們主要介紹.NET中的資料訪問技術:ADO.NET.
ADO.NET的架構
可以看到,ADO.NET中的類分為兩種:
- 1.串連提供者類(Connection,Command,DataReader等)
- 2.資料類(DataSet,DataTable,DataView等)
- 這兩種分類和我在前一章中介紹的組件分類是一致的.
串連提供者類
不同的資料庫,使用不同的Provider來訪問資料庫..NET架構公開了一組公用的介面,可以讓資料庫廠商實現自己的Provider.內建的資料Provider有:
1.System.Data.SqlClient(訪問Sql Server)
2.System.Data.OracleClient(訪問Oracle,不過Oracle自己提供了更好的Privider,叫ODP.NET,建議直接用這個)
3.System.Data.OleDb(用OleDb協議訪問資料庫)
4.System.Data.Odbc(用Odbc協議訪問資料庫)
在.NET1.1中,使用原廠模式現實這種Provider模型.如:System.Data.Sqlclient.SqlConnection現實了System.Data.IDbConnection.
在.NET2.0中,使用了抽象工廠現實這種Provider模型.如:System.Data.Sqlclient.SqlConnection繼承於System.Data.Common.DbConnection,而System.Data.Common.DbConnection實現了System.Data.IDbConnection.
通過使用工廠,我們很容易編寫通用的資料存取碼,而不用考慮後面的資料庫.如下面的樣本中,你可以將System.Data.SqlClient存在設定檔中,在運行時讀取:
var factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient");
var conn = factory.CreateConnection();
var cmd = factory.CreateCommand();
var cmbBuilder = factory.CreateCommandBuilder();
var adp= factory.CreateDataAdapter();
var parm = factory.CreateParameter();
…
要知道自己機器上註冊了哪些Provider,可以調用這個訪法:
DataTable registeredProviders = System.Data.Common.DbProviderFactories.GetFactoryClasses();
DataSet
簡單來說,DataSet就是記憶體中的資料庫.它支援繼開式的資料訪問和更新.基於Xml儲存資料,很容易地序列化/還原序列化Xml資料.DataSet這種大粒度的資料訪問,很適合在分布式系統中使用.另一個優點是它是基於"集合式"的資料結構,極大地簡化了用戶端程式的編寫.
注意,DataSet(還有DataTable,DataColumn)有一個ExtendedProperties屬性,它本質是一個字典一樣的東西.你可以儲存一些自訂的屬性,如DataSet的產生日期,到期日期等.
如:
ds.ExtendedProperties.Add("Expiredate", DateTime.Now.AddHours(8));
ds.ExtendedProperties.Add("Author", "Rock Niu");
DataAdapter
DataSet中的資料怎麼從DB拉下來,怎麼更新回DB,都得靠DataAdapter(資料配接器),是DataAdapter的結構圖:
在構造DataAdapter時,通常我們要指定SelectCommand,它用來在DataAdapter.Fill(DataSet)時查詢資料.
Update, Insert, Delete這幾個Command只在調用DataAdapter.Update(DataSet)時才會用到,它們可以由CommanBuilder幫我們自動產生.不過它動態產生時,會訪問表的中繼資料,且Command中會把所有列放在where條件中,這會影響效能.建議大家自己指定Update, Insert, Delete這幾個Command的Text,最好用預存程序,這樣效能最好.