閱讀529 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C# DataSet.RejectChanges 方法

        回滾自創建 DataSet 以來或上次調用 DataSet.AcceptChanges 以來對其進行的所有更改。
        調用 DataSet.RejectChanges 以針對由 DataSet 包含的所有 DataTable 對象調用 DataTable.RejectChanges 方法。
        由 DataSet 包含的每個 DataRow 對象都可通過調用 DataRow.BeginEdit 方法設置為編輯模式。 在調用 DataRow.EndEdit 方法之後,可通過針對 DataRow 對象所屬的       DataTable 調用 DataTable.RejectChanges 來拒絕更改。
        DataTable.RejectChanges 方法被調用時,仍處於編輯模式的任何行將取消其編輯。 新行被移除。 已修改的和已刪除的行返回到其原始狀態 (DataRowState.Unchanged)。

        AcceptChanges 和 RejectChanges 僅適用於與 DataRow 相關的更改,即 Add、Remove、Delete 和 Modify。 它們不適用於架構和結構方麵的更改。

代碼如下(程序集:System.Data(在 system.data.dll 中)):

public void RejectChanges()
{
	IntPtr intPtr;
	Bid.ScopeEnter(out intPtr, "<ds.DataRow.RejectChanges|API> %d#\n", this.ObjectID);
	try
	{
		if (this.RowState != DataRowState.Detached)
		{
			if (this._columns.ColumnsImplementingIChangeTrackingCount != this._columns.ColumnsImplementingIRevertibleChangeTrackingCount)
			{
				DataColumn[] columnsImplementingIChangeTracking = this._columns.ColumnsImplementingIChangeTracking;
				for (int i = 0; i < columnsImplementingIChangeTracking.Length; i++)
				{
					DataColumn dataColumn = columnsImplementingIChangeTracking[i];
					if (!dataColumn.ImplementsIRevertibleChangeTracking)
					{
						object obj;
						if (this.RowState != DataRowState.Deleted)
						{
							obj = this[dataColumn];
						}
						else
						{
							obj = this[dataColumn, DataRowVersion.Original];
						}
						if (DBNull.Value != obj && ((IChangeTracking)obj).IsChanged)
						{
							throw ExceptionBuilder.UDTImplementsIChangeTrackingButnotIRevertible(dataColumn.DataType.AssemblyQualifiedName);
						}
					}
				}
			}
			DataColumn[] columnsImplementingIChangeTracking2 = this._columns.ColumnsImplementingIChangeTracking;
			for (int j = 0; j < columnsImplementingIChangeTracking2.Length; j++)
			{
				DataColumn column = columnsImplementingIChangeTracking2[j];
				object obj2;
				if (this.RowState != DataRowState.Deleted)
				{
					obj2 = this[column];
				}
				else
				{
					obj2 = this[column, DataRowVersion.Original];
				}
				if (DBNull.Value != obj2)
				{
					IChangeTracking changeTracking = (IChangeTracking)obj2;
					if (changeTracking.IsChanged)
					{
						((IRevertibleChangeTracking)obj2).RejectChanges();
					}
				}
			}
		}
		this._table.RollbackRow(this);
	}
	finally
	{
		Bid.ScopeLeave(ref intPtr);
	}
}


最後更新:2017-04-03 16:49:14

  上一篇:go 保函
  下一篇:go 用戶 &#39;sa&#39; 登錄失敗。原因: 該帳戶被禁用。 (Microsoft SQL Server,錯誤: 18470)