DataTable基礎認識

今日的主題就是要來說明DataTable以及如何使用DataTable。

一個完整的DataTable是由三個東西組成的,欄位(DataColumn)、列(DataRow)以及存放的值

上一篇介紹基礎資料庫連線中,有使用到一個叫DataSet的物件,

這次小弟我想從這物件開始加強ADO.NET會用到各物件的基礎觀念。

上述的DataSet可以想像成由許多Table所組成的資料表集合

就像當抽屜拉開後,一份份檔案夾並排的樣子,這就是所謂的DataSet ,在介紹此物件前,

有一個看似簡單,但卻很重要的物件 ---- DataTable。剛提到,DataSet是由許多Table所組成的資料表集合,

而這個Table在C#裡就叫DataTable,所以今天的主題就是要來說明DataTable以及如何使用DataTable。

一個完整的DataTable是由三個東西組成的,欄位(DataColumn)、列(DataRow)以及存放的值,如下圖

今天就要來實作如何透過C#來建立一個DataTable !!!

首先

要先建立DataTable物件


//1.DataTable dt ;
//  dt = new DataTable("StudentData");

//2.
DataTable dt = new DataTable("StudentData");

上述有兩種建立方式,看各位喜歡用哪一種。括號裡面是命名此DataTable的名稱。

ps : DataTable的物件是在System.Data參考裡,如果沒有請記得加入System.Data並Using System.Data

第二步

DataColumns


dt.Columns.Add("StudentID", typeof(String));
dt.Columns.Add("StudentName", typeof(String));
dt.Columns.Add("Math", typeof(Double));
dt.Columns.Add("Eng", typeof(Double));            

//只有String 才要設定長度
 //StudentID
dt.Columns["StudentID"].MaxLength = 10;//長度
dt.Columns["StudentID"].AllowDBNull = false;//不能空值
dt.Columns["StudentID"].Unique = true;//建立唯一性
 //StudnetName
dt.Columns["StudentName"].MaxLength = 10;
dt.Columns["StudentName"].AllowDBNull = false;

第三步

讓DataGridView的資料來源設定為dt


dataGridView1.DataSource = dt;

當上述都完成後,應該是下圖所顯示的 :

此時我們已經建立好DataColumns,接著要透過DataRow來新增資料

第一步


 //第一種新增列的方法

//DataRow 沒有New
DataRow row;
//切記 !! DataTable 要產生Row時,必須使用NewRow這個方法
//可以把它想成為將dt產生一個新的列
row = dt.NewRow();

第二步設定值


//隨機產生成績 (放全域)
Random rd = new Random();

//產生順序ID (放全域)
int G_studentID = 0;

row["StudentID"] = "S00" + (++G_studentID);
row["StudentName"] = G_studentID;
row["Math"] = Double.Parse( (rd.NextDouble() * 100.0).ToString("0.00"));
row["Eng"] = Double.Parse((rd.NextDouble() * 100.0).ToString("0.00"));

最後一步將DataRow新增到Table裡


dt.Rows.Add(row);

完成後如下圖 :

 

當使用DataRow時,可以直接指定欄位名

ex : row["Math"] 或者指定索引值 row[2] 都可以

 

透過DataRow新增資料還有第二個方法


 DataRow row;
 row = dt.NewRow();

dt.Rows.Add(new Object[] { "S00" + (++G_studentID), G_studentID, Double.Parse((rd.NextDouble() * 100.0).ToString("0.00")), Double.Parse((rd.NextDouble() * 100.0).ToString("0.00")) });

這樣也可以,不過要確保欄位順序的問題。

 

讓我們來回顧一下今天的步驟及重點

第一 建立Table

第二 新增DataColumns

第三 新增DataRow(切記,沒有DataRow row = new DataRow(); 這種寫法,因為DataRow沒有建構子)

第四 將DataRow Add 到DataTable裡

 

 

以上都是基礎觀念,但也是有許多問題會產生

EX : row["Math"] 的Math 如果我今天打成小寫的"Nath"

將會出現

會顯示此資料行不屬於資料表的欄位

這表示程式碼不夠強壯,因為人總是會出錯,為了避免出錯,應該要嘗試透過電腦來幫我們指定欄位,

這樣就能避免手誤或者粗心所造成的錯誤,往後小弟阿翔會慢慢介紹如何使自己的程式碼更強壯,

等一些基礎觀念發表完之後,就會發表進階觀念,來使自己以及剛踏入C#的初學者來一起進步。

 

如有錯誤歡迎各位回覆討論。

增強我的實力源自於您的糾正。

謝謝。