ADO.NET 觀念與實作篇-如何將DataSet裡的DataTable複製一份到另一個DataSet

ADO.NET 觀念與實作篇-如何將DataSet裡的DataTable複製一份到另一個DataSet

   在ADO.NET 的物件架構模型中,分為兩大部分,一是 DataProvide 資料提供者,二是DataSet(離線環境),DataSet 資料集是一種存在記憶體裡的物件,您可以把它當作記憶體的關聯式資料庫來處理,DataSet資料集架構裡大致包含Tables、Relations、ExtendedProperties,Tables就是在關聯式資料庫的資料表集合體,Relations 記錄著Table與Table之間的關連性,如父/子資料表,ExtendedProperties您可以在其中放置自訂資訊,如用來產生結果集的 SELECT 陳述式,或產生資料的時間,架構圖如以下
DataSetSchema

而今天的主體將是要說明如果將一個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裡畫面設計圖如下:

FormDesign1

接下來在第一個Button(btnFirTable)的click寫下以下程式碼:
 
Code1


        {
            //建立連線物件
            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();

        }

執行結果圖
result1

接下來也是主要的關鍵語法,在第二個Button(btnCpTble),撰寫下列語法:
Code2


        {
            System.Data.DataTableReader drt = dataSet1.CreateDataReader();

            dataSet2.Load(drt, LoadOption.OverwriteChanges, "table1");

            dataGridView2.DataSource = dataSet2.Tables["table1"];

        }

按下第二個Button(btnCpTble),執行結果如下圖:
result2

整個過程就完成實作table在兩個dataset之間複製與移動…

  

      在應用程式開發領域中,將近有七成以上都跟資料庫有關係,而微軟的開發平台策略上,.NET技術架構中,ADO.NET 就是將所有跟資料處理相關的功能封裝成一個類別庫,因此如果可以將ADO.NET核心觀念與實作掌握住,甚至更可以把微軟的主要資料庫SQL SERVER的技術研究徹底,哪麼您可以稱為一個微軟技術專家了。