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

[ADO.NET] Sql如何使用 DataAdapter (一)

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] 

2009-11-8 下午 08-42-30_thumb[1] 

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

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

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

2009-11-8 下午 08-44-28_thumb[1] 
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]

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]

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

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

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

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

2009-11-8 下午 08-37-06_thumb[1] 
2009-11-8 下午 08-38-00_thumb[1] 
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 (二)

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo