程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> DataTable.ImportRow()與DataTable.Rows.Add()的區別,datatable.importrow

DataTable.ImportRow()與DataTable.Rows.Add()的區別,datatable.importrow

編輯:C#入門知識

DataTable.ImportRow()與DataTable.Rows.Add()的區別,datatable.importrow


今天寫代碼的時候用到ImportRow()向DataTable中添加記錄,代碼如下:

DataTable dt = datatable;
DataRow dr = dt.NewRow();
dr["FileName"] = fileName;
dr["DbName"] = DbName;
dt.ImportRow(dr);


可是執行後發現dtAppendix中的記錄並沒有增加。可是將上述紅色色代碼換成dt.Rows.Add(dr);就可以了。後上網查了下資料弄清楚了原因。下面就說一下這兩者的用法與區別及其適用情況。

1、首先,我們先說下DataTable.NewRow()方法,這個方法可以創建和表具有相同構架的DataRow(而且必須使用這個方法才能創建和原表一樣構架的DataRow),並且這個新行是添加在原表上的。但是我發現這個DataTable中並沒有這個空行。為什麼?原因是這樣的:原來Datatable中Rows都一個RowState屬性,共有如下幾種:

1,Detached 該行已被創建,但不屬於任何 DataRowCollection。DataRow 在以下情況下立即處於此狀態:創建之後添加到集合中之前;或從集合中移除之後。
2,Unchanged 該行自上次調用AcceptChanges以來尚未更改。
3,Added 該行已添加到DataRowCollection中,AcceptChanges尚未調用。
4,Deleted 該行已通過DataRow的Delete方法被刪除。
5,Modified 該行已被修改,AcceptChanges尚未調用。

其實NewRow()創建的行其RowState是Detached,顯而易見新建的行是不可見。


2、ImportRow()
將DateRow復制到DataTable中,保留任何屬性設置以及初始值和當前值。但是當DataRow的RowState屬性為Detached時無法復制,所以可見上述紅色代碼不可行了。網上有人說不能復制是因為新建的行隸屬於原表,我認為這是不正確,究其原因很是因為行的屬性。其實如果我們把行的屬性改變的話,ImportRow()方法還是可行的。
ImportRow()一般用於將一個表中的數據復制到另一個表中。實例代碼如下:

DataTable dtNew = dt.Clone();
foreach (DataRow dr in dt.Rows)
{
dtNew.ImportRow(dr);
}   如果真的想使用ImportRow(),可以先增加一個空行,這樣操作: DataTable dt = datatable;
DataRow dr = dt.NewRow();
dr["FileName"] = fileName;
dr["DbName"] = DbName; dt.Row.add();
dt.ImportRow(dr);   這樣操作的話,有點畫蛇添足,不建議使用!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved