close

以下文章皆轉載於

VB/ VBA/ C#/ Java/ C++ 語言學習筆記
美妙人生

 

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方法
//===========================================
}
}
}

 

<![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]>

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] 

 

<![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]>

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] 

 

<![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]>

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]

 

 

<![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]><![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]>

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] <![CDATA[ <![cdata[ .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; }]]>

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

CS_BeginLoadData.rar

VB_BeginLoadData.rar

 

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

arrow
arrow
    全站熱搜

    suhsienchin 發表在 痞客邦 留言(0) 人氣()