国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

使用ADO.NET2.0提升數據交互性能(5)_.Net教程

2024-07-10 12:51:29
字體:
來源:轉載
供稿:網友

推薦:使用ADO.NET2.0提升數據交互性能(4)
五:DataSet的性能提升對于開發人員來說,ADO.NET 2.0最激動人心的變化莫過于.net開發組終于實現了他們許諾多年的事情:確實提升Dataset的性能了。由于1.1版本Dataset令人不敢恭維的

六:DataTable和其他方面的性能提升

另一個好消息是DataTable的功能被大大增強了。畢竟我們不是時時需要Dataset。

1.裝載XML數據

在 ADO.NET 1.* 時,離線的數據訪問模型以 DataSet 對象為主,因此若要將 XML 的數據裝載到 DataTable,必須通過 DataSet 來實現。若我們僅操作一個數據表,不需要訪問多個數據表,則還需經過 DataSet 類才能賦予 DataTable 數據或將數據輸出成 XML

文件,其過程有點繁瑣。ADO.NET 2.0 的 DataTable 類則新增了與 DataSet 相同的

ReadXML、ReadXMLSchema、WriteXML 以及WriteXMLSchema 等方法。因此我們可以直接操作 DataTable 實例,而不需先創建 DataSet 類的實例來賦予 DataTable 實例數據,然后只使用 DataTable 實例。

2.結果集直接裝載DataTable

可以通過DataTableReader對象生成DataTable和DataSet。利用DataTable和DataSet在2.0版本中新引入的方法Load,可以傳遞DataTableReader或者任何實現IDataReader接口的類對象。下面的代碼就是通過Load方法將dt1的數據傳遞到新的數據表dt2中:

以下為引用的內容:

DataTableReader dtRdr = dt1.CreateDataReader();
DataTable dt2 = new DataTable();
dt2.Load(dtRdr);

在使用Load方法裝載多行數據時,可以先調用BeginLoadData方法來避免通知(notifications),索引維護(index maintenance)以及約束檢查(constraint checking),然后再通過EndLoadData方法返回數據。

3.通過 SqlDataAdapter 類實例將 DataTable 內的記錄更新回數據源

現在我們還可以使用 SqlDataAdapter 類實例通過 DataGridView 更新的記錄。

Update方法由以下幾個重載:

以下為引用的內容:

public int Update(DataRow[] dataRows);

public override int Update(DataSet dataSet);

public int Update(DataTable dataTable);

public int Update(DataSet dataSet, string srcTable);

4.千呼萬喚的Merge方法,終于實現了。

以下為引用的內容:

public void Merge(DataTable table);

public void Merge(DataTable table, bool preserveChanges);

public void Merge(DataTable table, bool preserveChanges, MissingSchemaAction missingSchemaAction);

preserveChanges:參數決定當前 DataTable在相同主鍵記錄合并時,是保留數據表內當前更新過的記錄(設置為 True),還是以合并來的記錄覆蓋掉曾經修改過的記錄(設置為 False)。

5.

輕量級對象和快速遍歷

ADO.NET 2.0中的DataTable提供了CreateDataReader方法(在之前的版本名為GetDataReader),該方法將創建一個DataTableReader對象。DataTableReader與DataTable不同,它是一個輕量級的對象,其支持Disconnected,這一點與DataReader(SqlDataReader)不同。這些特點決定遍歷DataTableReader對象將更加快速,占用的數據資源更少(Disconnected)。下面的代碼創建了一個DataTableReader對象,并將其綁定到DataGridView控件上:

以下為引用的內容:

using (SqlConnection cn = new SqlConnection(cnStr))
{
SqlCommand cmd = new SqlCommand(sqlAllCustomers, cn);
SqlDataAdapter adpt = new SqlDataAdapter(cmd);
DataTable dtCustomers = new DataTable("Customers");
adpt.Fill(dtCustomers);
DataTableReader dtRdr = ds.CreateDataReader();
dgvCustomers.DataSource = dtRdr;
}

和DataReader一樣,DataTableReader對象只能向前遍歷,可以通過Read方法,定位到對象的第一行。如果DataTableReader如果是被一個包含有多個數據表的DataSet對象創建,DataTableReader也會包含多個結果集。通過調用NextResult方法,訪問結果集序列。

以下為引用的內容:

using (SqlConnection cn = new SqlConnection(cnStr))
{
// Create the Command and Adapter
SqlCommand cmd = new SqlCommand(sqlAllCustomers, cn);
SqlDataAdapter adpt = new SqlDataAdapter(cmd);

// Create a DataTable and fill it
DataTable dtCustomers = new DataTable("Customers");
adpt.Fill(dtCustomers);

DataSet ds = new DataSet();
ds.Tables.Add(dtCustomers);
adpt.SelectCommand = new SqlCommand("SELECT * FROM Orders", cn);

adpt.Fill(ds, "Orders");

// Create the DataTableReader (it is disconnected)
using(DataTableReader dtRdr = ds.CreateDataReader())
{
do
{
Console.WriteLine("******************************");
while (dtRdr.Read())
{
Console.WriteLine(dtRdr.GetValue(0).ToString());
}
}
while (dtRdr.NextResult());
}
}

DataTableReader對象中數據表的順序與DataSet中的數據表順序一致。如果你需要制定特定的順序,可以通過重載CreateDataReader方法來實現。

6.其他的更新

Connection Pool操作


ADO.NET 1.0 就已經引進了數據庫連接 pooling 的新架構,但只有 SqlClient 和 OracleClient

兩個數據提供者使用這種架構,OLE DB 和 ODBC 因為沿用以往的程序架構,有自己的 pooling 機制。

.NET 的 pooling 架構提供了較 OLE DB、ODBC 更細致的控制,例如設置 pool 內最大與最小的連接數目,pool manager

等待可用連接的時間,可程序化地清空 pool(也就是關閉其內的連接)等。你可以通過靜態方法(VB.NET 稱為 Shared)

SqlConnection.ClearPool 清空某個特定的 connection pool,或是以靜態方法 SqlConnection.ClearPools

清掉某個 AppDomain 內所有的 Connection Pool。


新的隔離級別

行隔離級別和SYSTEM.Transaction事務,行隔離級別是2005新的隔離級別,可以大大提升數據交互的并發性。

SYSTEM.Transaction事務可以使用DTC(Distributed Transaction Coordinator,分布式事務協調)完成分布式事務。但是這個東東的速度。。。。。

其實,只要你打開兩條以上的連接,盡管這兩條連接是訪問同一個數據庫,都會發生分布式事務,就因為需要 DTC(Distributed Transaction

Coordinator)的參與,將會導致速度比原先本地事務慢 10 倍以上。

分享:使用ADO.NET2.0提升數據交互性能(3)
四:使用SqlBulkCopy批量裝載數據(僅限SqlClient)以往訪問 SQL Server 2000 時,若有大量的數據記錄需要添加到數據庫內,例如從主機系統或是 NCR Teradata、Oracle等數據庫系統下載大量

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 花莲市| 沅江市| 澄城县| 乌什县| 汕头市| 冷水江市| 图片| 阜南县| 扶沟县| 平山县| 长寿区| 湛江市| 英吉沙县| 泽库县| 河间市| 汝州市| 五华县| 凭祥市| 钦州市| 金平| 南郑县| 龙里县| 年辖:市辖区| 蓝山县| 淮南市| 子长县| 婺源县| 叶城县| 呼伦贝尔市| 古浪县| 舞钢市| 大荔县| 彭水| 什邡市| 精河县| 徐水县| 游戏| 曲靖市| 安岳县| 离岛区| 天津市|