[url http://www.dotblogs.com.tw/netqna/]ADO.NET 觀念與實作篇-如何將DataSet裡的DataTable複製一份到另一個DataSet
完整篇幅-> http://www.dotblogs.com.tw/netqna/
在ADO.NET 的物件架構模型中,分為兩大部分,一是 DataProvide 資料提供者,二是DataSet(離線環境),DataSet 資料集是一種存在記憶體裡的物件,您可以把它當作記憶體的關聯式資料庫來處理,DataSet資料集架構裡大致包含Tables、Relations、ExtendedProperties,Tables就是在關聯式資料庫的資料表集合體,Relations 記錄著Table與Table之間的關連性,如父/子資料表,ExtendedProperties您可以在其中放置自訂資訊,如用來產生結果集的 SELECT 陳述式,或產生資料的時間,架構圖如以下
而今天的主體將是要說明如果將一個DataSet資料集(再強調一次,把它當作記憶體裡的一個資料庫)的DataTable(資料庫裡的Table),複製到另外一個DataSet的Table裡,在Sql server的T-SQL的寫法我們通常可以利用如下語法:
SELECT *
INTO DatabaseB.schema.tableB
FROM DatabaseA.schema.tableA
但今天我們將利用一個類別成員DataTableReader,在ADO.NET實作 Table 在 Dataset與 DataSet 之間如何有效率運作機制…
首先建立一個Windows Form的專案,Form的設計畫面大致如下,兩個按鈕Button和兩個DataGirdView和兩個DataSet資料集,第一個button(btnFirTable)是載入DataSet1裡的Table到DataGridVIew1,另外一個button(btnCpTble)是複製第一個button產生的Table到另外一個Dataset2裡畫面設計圖如下:
接下來在第一個Button(btnFirTable)的click寫下以下程式碼:
view plaincopy to clipboardprint?
private void btnFirTable_Click(object sender, EventArgs e)
{
//建立連線物件
SqlConnection conn;
conn = new SqlConnection("Data Source=localhost;integrated security=sspi;Initial Catalog=AdventureWorks");
SqlDataAdapter sda=new SqlDataAdapter("select * from Sales.Customer",conn);
//將資料填入 資料集 dataSet1
sda.Fill(dataSet1, "table");
//將資料結果繫結至DataGridView1
dataGridView1.DataSource = dataSet1.Tables["table"];
//釋放物件
conn.Close();
sda.Dispose();
}
private void btnFirTable_Click(object sender, EventArgs e)
{
//建立連線物件
SqlConnection conn;
conn = new SqlConnection("Data Source=localhost;integrated security=sspi;Initial Catalog=AdventureWorks");
SqlDataAdapter sda=new SqlDataAdapter("select * from Sales.Customer",conn);
//將資料填入 資料集 dataSet1
sda.Fill(dataSet1, "table");
//將資料結果繫結至DataGridView1
dataGridView1.DataSource = dataSet1.Tables["table"];
//釋放物件
conn.Close();
sda.Dispose();
}
執行結果圖
接下來也是主要的關鍵語法,在第二個Button(btnCpTble),撰寫下列語法:
view plaincopy to clipboardprint?
private void btnCpTble_Click(object sender, EventArgs e)
{
System.Data.DataTableReader drt = dataSet1.CreateDataReader();
dataSet2.Load(drt, LoadOption.OverwriteChanges, "table1");
dataGridView2.DataSource = dataSet2.Tables["table1"];
}
private void btnCpTble_Click(object sender, EventArgs e)
{
System.Data.DataTableReader drt = dataSet1.CreateDataReader();
dataSet2.Load(drt, LoadOption.OverwriteChanges, "table1");
dataGridView2.DataSource = dataSet2.Tables["table1"];
}
按下第二個Button(btnCpTble),執行結果如下圖:
整個過程就完成實作table在兩個dataset之間複製與移動…
在應用程式開發領域中,將近有七成以上都跟資料庫有關係,而微軟的開發平台策略上,.NET技術架構中,ADO.NET 就是將所有跟資料處理相關的功能封裝成一個類別庫,因此如果可以將ADO.NET核心觀念與實作掌握住,甚至更可以把微軟的主要資料庫SQL SERVER的技術研究徹底,哪麼您可以稱為一個微軟技術專家了。