以下文章皆轉載於
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 ,多載方法如下。
法一:載入DataSet
法二:載入DataTable
法三:批次查詢載入兩個以上的DataTable
法四:載入DataSet
法五:增加效能,載入部份資料
4.DataAdapter在載入DataTable資料時會為索引做維護動作,若要增進效能,在條件環境允許下,我們可以在載入 DataTable之前使用BeginLoadData 方法,關閉告知、索引維護和條件約束;載入完成後可以用EndLoadData 方法開啟告知、索引維護和條件約束。
<![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) 規則。
6.MissingSchemaAction 屬性可以控制DataAdapter取回的結構描述資訊,與DataSet結構描述資訊不符時所要採取的動作,如下程式所述,如果我們寫了兩次的Fill,我們會發現資料重覆了,若我們設定了結構描述資訊動作,就能採取一些動作。
AddWithKey範例如下,若沒有加AddWithKey動作,Fill兩次後會發生資料重複的情況,反之則無重複資料
Error範例如下:原本可以執行的程式,由於設定動作而出現例外了!
<![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 方法多載如下。
SQL陳述句,下述語句是表示將EmployeeID對應到DataTable的ID、LastName 對應到DataTable的Name;當然這個方法是比較累的,需要手動建立對應的欄位(as)。
<![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 列舉型別幫我們工作。
SchemaType 列舉型別成員如下
設定對應欄位後,我們可以發現加如結構描述動作的程式不再出現例外了。
8.TableMappings 屬性可以用來制作對照表。
由下圖所述,SchemaType.Mapped將"Employees"資料表對應到"員工資料表",並建立了名為"員工資料表"的DataTable
建立對應欄位SchemaType.Mapped
由下程式所述,SchemaType.Source將以相同方式讀取資料表(不做對應工作),並建立了名為"EmployeesTable"的DataTable
用迴圈觀察DataTable的TableName是否如上所述,觀察結果如下。
執行結果如下
<![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; }]]>
範例下載:範例沒有使用太高深的技巧,如需使用的人,請自行解開註解。
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 ,多載方法如下。
法一:載入DataSet
法二:載入DataTable
法三:批次查詢載入兩個以上的DataTable
法四:載入DataSet
法五:增加效能,載入部份資料
4.DataAdapter在載入DataTable資料時會為索引做維護動作,若要增進效能,在條件環境允許下,我們可以在載入 DataTable之前使用BeginLoadData 方法,關閉告知、索引維護和條件約束;載入完成後可以用EndLoadData 方法開啟告知、索引維護和條件約束。
5.DataAdapter載入DataSet時會檢查DataSet中條件約束,比如檢查Primary Key是否唯一,若要增進效能,在條件環境允許下,使用EnforceConstraints 屬性來決定是否遵循條件約束 (Constraint) 規則。
6.MissingSchemaAction 屬性可以控制DataAdapter取回的結構描述資訊,與DataSet結構描述資訊不符時所要採取的動作,如下程式所述,如果我們寫了兩次的Fill,我們會發現資料重覆了,若我們設定了結構描述資訊動作,就能採取一些動作。
AddWithKey範例如下,若沒有加AddWithKey動作,Fill兩次後會發生資料重複的情況,反之則無重複資料
Error範例如下:原本可以執行的程式,由於設定動作而出現例外了!
7.若資料來源資料與目的地結構描述資訊不同,可以利用SQL陳述句,或用FillSchema 方法來建立彼此欄位的對應,FillSchema 方法多載如下。
SQL陳述句,下述語句是表示將EmployeeID對應到DataTable的ID、LastName 對應到DataTable的Name;當然這個方法是比較累的,需要手動建立對應的欄位(as)。
FillSchema 方法,這方法就比較便利了,不需要手動建立對應,將由SchemaType 列舉型別幫我們工作。
SchemaType 列舉型別成員如下
設定對應欄位後,我們可以發現加如結構描述動作的程式不再出現例外了。
8.TableMappings 屬性可以用來制作對照表。
由下圖所述,SchemaType.Mapped將"Employees"資料表對應到"員工資料表",並建立了名為"員工資料表"的DataTable
建立對應欄位SchemaType.Mapped
由下程式所述,SchemaType.Source將以相同方式讀取資料表(不做對應工作),並建立了名為"EmployeesTable"的DataTable
用迴圈觀察DataTable的TableName是否如上所述,觀察結果如下。
執行結果如下
範例下載:範例沒有使用太高深的技巧,如需使用的人,請自行解開註解。
留言列表