程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#獲得變革過的DataTable記載的完成辦法

C#獲得變革過的DataTable記載的完成辦法

編輯:C#入門知識

C#獲得變革過的DataTable記載的完成辦法。本站提示廣大學習愛好者:(C#獲得變革過的DataTable記載的完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#獲得變革過的DataTable記載的完成辦法正文


本文實例講述了C#獲得變革過的DataTable記載的完成辦法,是一個異常適用的功效!詳細完成辦法以下:

起首DataTable可以看作是一個物理表的內存式存儲,每個DataRow都有一個屬性叫做RowState。是以隨意率性一行中某一個字段產生轉變,那末全部DataRow的RowState也就產生了轉變。RowState是一個列舉,個中包括5個內容:

1)Detached:未被附加(普通剛創立的DataRow,或許曾經被Remove或許RemoveAt,或許Delete以後挪用過AcceptChanges辦法的行,或許是WinForm控件DataGridView默許設置下最初誰人永久也留出的空行……都被主動設置該狀況)。

2)Added:剛添加的新行。

3)Deleted:剛被刪除的行(留意:這裡只是從內存表中刪除,物理數據表中還沒有刪除,此時你沒法直接去拜訪該行的某個字段的內容!)。

4)Modified:剛被修正的行。

5)Unchanged:本來的行。

DataTable批量經由過程外部遍歷這些行的RowState,然後借助DataAdapter的CRUD辦法依據這些State挪用分歧的語句批量更新到真實數據表中。

假如要撤消可以挪用DataTable的RejectChanges辦法,確認從內存表中刪除才挪用AcceptChanges辦法。

經由過程DataRow的RowState最多只能斷定哪行被修正,那末挪用分歧的語句若何停止更新呢?好比說我要更新一行,確定應用update……where語句,where前面的前提是一個舊值,set是一個新值,若何獲得舊值呢?

.NET中的DataColumn有一個屬性叫做DataRowVersion,這個屬性有4個:

1)Current:以後數值(DataRowState=Deleted時刻有效)。

2)Original:本來數值(DataRowState=Added或許Unchanged時刻有效)。

3)Proposed:建議數值(僅在DataRowState=Detached的時刻有用)。

3)Default:默許數值(DataRowState=Added,Modified或許Unchanged時,等於Current;假如DataRowState=Deleted,等於Original;假如DataRowState=Detached,那末等於Proposed)。該屬性可以主動調劑,你吃禁絕哪一行的屬性,一概可使用這個屬性獲得特定字段的內容。

依據這個軌則,我們再聯合微軟DataTable的GetChanges辦法隨意馬虎可以獲得做了隨意率性變革的源數據和實際數據,詳細C#完成代碼以下:

DataTable dt = new DataTable();
dt.Columns.Add("Id");
for (int i = 1; i < 11; i++)
{
dt.Rows.Add(i);
}
dt.AcceptChanges();
//添加第十一行
dt.Rows.Add(11);
//修正第二行
dt.Rows[1][0] = 21;
//刪除第一行
dt.Rows[0].Delete();
//檢索情形
DataTable cdt = dt.GetChanges();
for (int i = 0; i <cdt.Rows.Count; i++)
{
if (cdt.Rows[i].RowState == DataRowState.Deleted)
{
  Console.WriteLine("刪除的行索引{0},本來數值是{1}",i,cdt.Rows[i][0,DataRowVersion.Original]);
}
else if (cdt.Rows[i].RowState == DataRowState.Modified)
{
  Console.WriteLine("修正的行索引{0},本來數值是{1},如今的新數值{2}", i, cdt.Rows[i][0, DataRowVersion.Original],cdt.Rows[i][0,DataRowVersion.Current]);
}
else if (cdt.Rows[i].RowState == DataRowState.Added)
{
  Console.WriteLine("新添加行索引{0},數值是{1}", i, cdt.Rows[i][0, DataRowVersion.Current]);
}
}

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