今日的主題就是要來說明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#的初學者來一起進步。
如有錯誤歡迎各位回覆討論。
增強我的實力源自於您的糾正。
謝謝。