完整篇幅-> 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的技術研究徹底,哪麼您可以稱為一個微軟技術專家了。
參考資料:OneNet魔力小子
-
‧
-
‧
-
‧
相關問答
- ASP網頁還能存活幾年?
- 使用C#在ASP.NET中發送電子郵件
- 充電:MSDN 開發人員講座~ASP.NET 3.5 新手上路 與 F#入門
- 透過ADO.NET呼叫預存程序,並使用Form-Based登入驗證
- 請問市面上是否有寫最基本MS-SQL 語法書?
- 網頁被植入惡意程式....
- 請問有沒有類似SQL Naviagtor,TOAD的軟體?
- 用web程式,從sqlserver裡select資料的動作,能夠指定終止嗎??
- Negies - 限制電腦、程式頻寬的工具
- Firefox3.0的附加元件裡的外掛程式
- 關於副檔名.bat的程式問題
- 請問windows應用程式與web應用程式,有何不同(設計上,介面上,操作上,資料庫等等)?
- PL-SQL 字串格式轉時間格式 要怎麼寫
- Vista Start Menu 功能表中的程式捷徑失效.
- 網路名詞Linux,Youtube,Skype,Google,HEMiDEMi,Ubuntu,Xoops,SQL念法
- HP PhotoSmart C4380驅動程式無法安裝在Windows 2000 Professional SP4
- Windows 清理助手 專門清理大陸惡意程式
- Vista Start Menu 功能表中的程式捷徑失效(至今無解!很困擾)
- 七成二的電腦中被植入灰色及犯罪程式,個人電腦已成駭客另類生財管道
- 網站流量判斷?









