使用ADO.NET2.0提升數(shù)據(jù)交互性能(5)_.Net教程
推薦:使用ADO.NET2.0提升數(shù)據(jù)交互性能(4)五:DataSet的性能提升 對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),ADO.NET 2.0最激動(dòng)人心的變化莫過(guò)于.net開(kāi)發(fā)組終于實(shí)現(xiàn)了他們?cè)S諾多年的事情:確實(shí)提升Dataset的性能了。 由于1.1版本Dataset令人不敢恭維的
六:DataTable和其他方面的性能提升
另一個(gè)好消息是DataTable的功能被大大增強(qiáng)了。畢竟我們不是時(shí)時(shí)需要Dataset。
1.裝載XML數(shù)據(jù)
在 ADO.NET 1.* 時(shí),離線的數(shù)據(jù)訪問(wèn)模型以 DataSet 對(duì)象為主,因此若要將 XML 的數(shù)據(jù)裝載到 DataTable,必須通過(guò) DataSet 來(lái)實(shí)現(xiàn)。若我們僅操作一個(gè)數(shù)據(jù)表,不需要訪問(wèn)多個(gè)數(shù)據(jù)表,則還需經(jīng)過(guò) DataSet 類才能賦予 DataTable 數(shù)據(jù)或?qū)?shù)據(jù)輸出成 XML
文件,其過(guò)程有點(diǎn)繁瑣。ADO.NET 2.0 的 DataTable 類則新增了與 DataSet 相同的
ReadXML、ReadXMLSchema、WriteXML 以及WriteXMLSchema 等方法。因此我們可以直接操作 DataTable 實(shí)例,而不需先創(chuàng)建 DataSet 類的實(shí)例來(lái)賦予 DataTable 實(shí)例數(shù)據(jù),然后只使用 DataTable 實(shí)例。
2.結(jié)果集直接裝載DataTable
可以通過(guò)DataTableReader對(duì)象生成DataTable和DataSet。利用DataTable和DataSet在2.0版本中新引入的方法Load,可以傳遞DataTableReader或者任何實(shí)現(xiàn)IDataReader接口的類對(duì)象。下面的代碼就是通過(guò)Load方法將dt1的數(shù)據(jù)傳遞到新的數(shù)據(jù)表dt2中:
| 以下為引用的內(nèi)容:
DataTableReader dtRdr = dt1.CreateDataReader(); |
在使用Load方法裝載多行數(shù)據(jù)時(shí),可以先調(diào)用BeginLoadData方法來(lái)避免通知(notifications),索引維護(hù)(index maintenance)以及約束檢查(constraint checking),然后再通過(guò)EndLoadData方法返回?cái)?shù)據(jù)。
3.通過(guò) SqlDataAdapter 類實(shí)例將 DataTable 內(nèi)的記錄更新回?cái)?shù)據(jù)源
現(xiàn)在我們還可以使用 SqlDataAdapter 類實(shí)例通過(guò) DataGridView 更新的記錄。
Update方法由以下幾個(gè)重載:
| 以下為引用的內(nèi)容:
public int Update(DataRow[] dataRows); public override int Update(DataSet dataSet); public int Update(DataTable dataTable); public int Update(DataSet dataSet, string srcTable); |
4.千呼萬(wàn)喚的Merge方法,終于實(shí)現(xiàn)了。
| 以下為引用的內(nèi)容:
public void Merge(DataTable table); public void Merge(DataTable table, bool preserveChanges); public void Merge(DataTable table, bool preserveChanges, MissingSchemaAction missingSchemaAction); |
preserveChanges:參數(shù)決定當(dāng)前 DataTable在相同主鍵記錄合并時(shí),是保留數(shù)據(jù)表內(nèi)當(dāng)前更新過(guò)的記錄(設(shè)置為 True),還是以合并來(lái)的記錄覆蓋掉曾經(jīng)修改過(guò)的記錄(設(shè)置為 False)。
5.
輕量級(jí)對(duì)象和快速遍歷
ADO.NET 2.0中的DataTable提供了CreateDataReader方法(在之前的版本名為GetDataReader),該方法將創(chuàng)建一個(gè)DataTableReader對(duì)象。DataTableReader與DataTable不同,它是一個(gè)輕量級(jí)的對(duì)象,其支持Disconnected,這一點(diǎn)與DataReader(SqlDataReader)不同。這些特點(diǎn)決定遍歷DataTableReader對(duì)象將更加快速,占用的數(shù)據(jù)資源更少(Disconnected)。下面的代碼創(chuàng)建了一個(gè)DataTableReader對(duì)象,并將其綁定到DataGridView控件上:
| 以下為引用的內(nèi)容:
using (SqlConnection cn = new SqlConnection(cnStr)) |
和DataReader一樣,DataTableReader對(duì)象只能向前遍歷,可以通過(guò)Read方法,定位到對(duì)象的第一行。如果DataTableReader如果是被一個(gè)包含有多個(gè)數(shù)據(jù)表的DataSet對(duì)象創(chuàng)建,DataTableReader也會(huì)包含多個(gè)結(jié)果集。通過(guò)調(diào)用NextResult方法,訪問(wèn)結(jié)果集序列。
| 以下為引用的內(nèi)容:
using (SqlConnection cn = new SqlConnection(cnStr)) // Create a DataTable and fill it DataSet ds = new DataSet(); adpt.Fill(ds, "Orders"); // Create the DataTableReader (it is disconnected) |
DataTableReader對(duì)象中數(shù)據(jù)表的順序與DataSet中的數(shù)據(jù)表順序一致。如果你需要制定特定的順序,可以通過(guò)重載CreateDataReader方法來(lái)實(shí)現(xiàn)。
6.其他的更新
Connection Pool操作
ADO.NET 1.0 就已經(jīng)引進(jìn)了數(shù)據(jù)庫(kù)連接 pooling 的新架構(gòu),但只有 SqlClient 和 OracleClient
兩個(gè)數(shù)據(jù)提供者使用這種架構(gòu),OLE DB 和 ODBC 因?yàn)檠赜靡酝某绦蚣軜?gòu),有自己的 pooling 機(jī)制。
.NET 的 pooling 架構(gòu)提供了較 OLE DB、ODBC 更細(xì)致的控制,例如設(shè)置 pool 內(nèi)最大與最小的連接數(shù)目,pool manager
等待可用連接的時(shí)間,可程序化地清空 pool(也就是關(guān)閉其內(nèi)的連接)等。你可以通過(guò)靜態(tài)方法(VB.NET 稱為 Shared)
SqlConnection.ClearPool 清空某個(gè)特定的 connection pool,或是以靜態(tài)方法 SqlConnection.ClearPools
清掉某個(gè) AppDomain 內(nèi)所有的 Connection Pool。
新的隔離級(jí)別
行隔離級(jí)別和SYSTEM.Transaction事務(wù),行隔離級(jí)別是2005新的隔離級(jí)別,可以大大提升數(shù)據(jù)交互的并發(fā)性。
SYSTEM.Transaction事務(wù)可以使用DTC(Distributed Transaction Coordinator,分布式事務(wù)協(xié)調(diào))完成分布式事務(wù)。但是這個(gè)東東的速度。。。。。
其實(shí),只要你打開(kāi)兩條以上的連接,盡管這兩條連接是訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù),都會(huì)發(fā)生分布式事務(wù),就因?yàn)樾枰?DTC(Distributed Transaction
Coordinator)的參與,將會(huì)導(dǎo)致速度比原先本地事務(wù)慢 10 倍以上。
分享:使用ADO.NET2.0提升數(shù)據(jù)交互性能(3)四:使用SqlBulkCopy批量裝載數(shù)據(jù)(僅限SqlClient) 以往訪問(wèn) SQL Server 2000 時(shí),若有大量的數(shù)據(jù)記錄需要添加到數(shù)據(jù)庫(kù)內(nèi),例如從主機(jī)系統(tǒng)或是 NCR Teradata、Oracle等數(shù)據(jù)庫(kù)系統(tǒng)下載大量
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實(shí)例(可帶附件)
- js實(shí)現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實(shí)現(xiàn)
- Asp.Net 無(wú)刷新文件上傳并顯示進(jìn)度條的實(shí)現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見(jiàn)代碼存在的偽造IP問(wèn)題探討
- VS2010 水晶報(bào)表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(kù)(連接字符串的配置及獲取)
- asp.net頁(yè)面?zhèn)髦禍y(cè)試實(shí)例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲(chǔ)過(guò)程實(shí)現(xiàn)分頁(yè)示例代碼
.Net教程Rss訂閱編程教程搜索
.Net教程推薦
- 解讀ASP.NET常用路徑(path)獲取方法對(duì)照表
- ASP.NET中Datagrid常見(jiàn)錯(cuò)誤
- 解析linq to xml操作XML的示例分析
- SQL Server 2005中插入XML數(shù)據(jù)方法
- asp.net CheckBoxList各項(xiàng)最小寬度CSS樣式(兼容性good)
- 再議ASP.NET DataGrid控件中的“添加新行”功能
- 關(guān)于利用C#遠(yuǎn)程存取Access數(shù)據(jù)庫(kù)
- 淺談在.NET應(yīng)用程序中進(jìn)行Erlang風(fēng)格的并行編程
- ASP.NET筆記之 圖庫(kù)權(quán)限設(shè)置的方法
- 關(guān)于Gridview的多種使用方法總結(jié)
- 相關(guān)鏈接:
- 教程說(shuō)明:
.Net教程-使用ADO.NET2.0提升數(shù)據(jù)交互性能(5)
。