部落格觀察

聯絡我

Software

最新回應

1.DataAdapter 類別 主要是用來將資料填入DataSet 類別DataTable 類別,然後更新資料來源。

2.使用步驟

2-1.建立SqlConnection連線

2-2.建立SqlCommand類別

2-3.建立SqlDataAdapter類別

2-4.建立DataSet類別或DataTable類別

2-5.使用Fill方法載入

如下所示:資料庫仍是使用北風資料庫

string cs = "Data Source=WIN-83S5ZZ3CD3D\\SQLEXPRESS;Initial Catalog=Northwind;Integrated Security=True";
string qs = "SELECT * FROM Employees";
//1.SqlConnection
using (SqlConnection cn = new SqlConnection(cs))
{
//2.SqlCommand
using (SqlCommand cmd=new SqlCommand(qs,cn))
{
//3.SqlDataAdapter
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
//4.
建立DataSet類別或DataTable類別
//使用Fill方法
//===========================================
}
}
}

 

3.使用Fill 方法 將資料填入DataSet DataTable ,多載方法如下。

2009-11-8 下午 04-58-40_thumb[2]

法一:載入DataSet

2009-11-8 下午 08-41-52_thumb[1] 

法二:載入DataTable
2009-11-8 下午 08-42-30_thumb[1] 

法三:批次查詢載入兩個以上的DataTable

2009-11-8 下午 09-02-08_thumb[1] 
法四:載入DataSet
2009-11-8 下午 08-43-46_thumb[1] 

法五:增加效能,載入部份資料

2009-11-8 下午 08-44-28_thumb[1] 
4.DataAdapter在載入DataTable資料時會為索引做維護動作,若要增進效能,在條件環境允許下,我們可以在載入 DataTable之前使用BeginLoadData 方法,關閉告知、索引維護和條件約束;載入完成後可以用EndLoadData 方法開啟告知、索引維護和條件約束。
2009-11-8 下午 08-45-10_thumb[1] 

 

5.DataAdapter載入DataSet時會檢查DataSet中條件約束,比如檢查Primary Key是否唯一,若要增進效能,在條件環境允許下,使用EnforceConstraints 屬性來決定是否遵循條件約束 (Constraint) 規則。

2009-11-8 下午 08-46-08_thumb[1]

6.MissingSchemaAction 屬性可以控制DataAdapter取回的結構描述資訊,與DataSet結構描述資訊不符時所要採取的動作,如下程式所述,如果我們寫了兩次的Fill,我們會發現資料重覆了,若我們設定了結構描述資訊動作,就能採取一些動作。

MissingSchemaAction 列舉型別成員如下

2009-11-8 下午 06-08-00_thumb[2]

AddWithKey範例如下,若沒有加AddWithKey動作,Fill兩次後會發生資料重複的情況,反之則無重複資料

2009-11-8 下午 08-49-41_thumb[1]

 2009-11-8 下午 05-52-52_thumb[6] 2009-11-8 下午 05-56-54_thumb[4]

Error範例如下:原本可以執行的程式,由於設定動作而出現例外了!
2009-11-8 下午 08-48-09_thumb[2] 
2009-11-8 下午 06-03-11_thumb[1] 

 

7.若資料來源資料與目的地結構描述資訊不同,可以利用SQL陳述句,或用FillSchema 方法來建立彼此欄位的對應,FillSchema 方法多載如下。

2009-11-8 下午 06-28-40_thumb[1]

SQL陳述句,下述語句是表示將EmployeeID對應到DataTable的ID、LastName 對應到DataTable的Name;當然這個方法是比較累的,需要手動建立對應的欄位(as)。

2009-11-8 下午 08-54-04_thumb[1]

 

 

FillSchema 方法,這方法就比較便利了,不需要手動建立對應,將由SchemaType 列舉型別幫我們工作。

2009-11-8 下午 08-53-22_thumb[1]

SchemaType 列舉型別成員如下

2009-11-8 下午 06-20-50_thumb[1]

設定對應欄位後,我們可以發現加如結構描述動作的程式不再出現例外了。

8.TableMappings 屬性可以用來制作對照表。

由下圖所述,SchemaType.Mapped將"Employees"資料表對應到"員工資料表",並建立了名為"員工資料表"的DataTable

2009-11-8 下午 08-37-06_thumb[1] 
建立對應欄位SchemaType.Mapped
2009-11-8 下午 08-38-00_thumb[1] 
由下程式所述,SchemaType.Source將以相同方式讀取資料表(不做對應工作),並建立了名為"EmployeesTable"的DataTable
2009-11-10 下午 05-22-31 
2009-11-8 下午 09-05-48[3]  
用迴圈觀察DataTable的TableName是否如上所述,觀察結果如下。

2009-11-8 下午 08-31-19_thumb[1]

執行結果如下

2009-11-8 下午 08-40-50_thumb[1]

範例下載:範例沒有使用太高深的技巧,如需使用的人,請自行解開註解。

CS_BeginLoadData.rar

VB_BeginLoadData.rar

 

續下篇 [ADO.NET] 如何使用 DataAdapter (二)

 

新手發帖請多包涵


回應

  • mis2000lab 2009/11/10 下午 03:50 回覆

    # re: [ADO.NET] 如何使用 DataAdapter (一)

    如果不嫌棄的話,我倒是推薦初學者下載「.NET Framework 2.0 SDK」有中文版,裡面對於 DataSet與DataAdapter的範例比較淺顯實用。

    在微軟官方的下載網站,都可以找到這份資料,容量不小約450MB。

  • mis2000lab 2009/11/10 下午 04:31 回覆

    # re: [ADO.NET] 如何使用 DataAdapter (一)

    這裡有微軟的中文文件,我個人覺得這個比較淺顯易懂,大家可以參考看看:
    http://msdn.microsoft.com/zh-tw/library/ms254937.aspx

  • yc421206 2009/11/10 下午 05:11 回覆

    # re: [ADO.NET] 如何使用 SqlDataAdapter (一)

    to mis2000lab :

    小弟不認為上述東西很深,反而是每一位設計師需要了解的,或許在開發WinForm或是Web時不太用到的東西,因為VS幫你做好了;最近在玩開發Web Part時,以前認為很簡單的東西,在Web Part裡都不一樣了,有更多基礎功需要紮下,那時現在才發現連GridView怎麼定義欄位型態都不會,原來這只是以前忽略的東西。


*標 題:

*姓 名:

 電子郵件: (將不會被顯示)

 個人網頁:

*回應

登入後使用進階評論

Please add 3 and 8 and type the answer here: