DataSet..::.Merge 方法 (DataSet)

來源:互聯網
上載者:User

將指定的 DataSet 及其架構合并到當前 DataSet 中。

命名空間:   System.Data
程式集:  System.Data (在 System.Data.dll 中)

C#

public void Merge(
DataSet dataSet
)
參數 dataSet 類型:
System.Data. . :: . DataSet

其資料和架構將被合并的 DataSet 。 常
異常 條件
ConstraintException

無法啟用一個或多個約束。

ArgumentNullException

dataSet 為 null Nothing nullptr null 引用(在 Visual Basic 中為 Nothing ) 。

備忘
Merge 方法用於合并架構大致相似的兩個 DataSet 對象。合并在用戶端應用程式上通常用於將資料來源中最近的更改合并到現有的

DataSet 中。這使用戶端應用程式能夠擁有用資料來源中的最新資料重新整理的
DataSet 。


通常在一系列過程的末尾調用
Merge 方法,這些過程涉及驗證更改、消除錯誤、使用更改更新資料來源並最後重新整理現有的
DataSet 。


在用戶端應用程式中,通常有這樣一個按鈕,使用者可以單擊它來收集已更改的資料並對它進行驗證,然後將它發送回中介層組件。在這種情況下,將首先調用
GetChanges 方法。該方法返回另一個為驗證和合并而最佳化的
DataSet 。第二個
DataSet 對象只包含已更改的
DataTable 和
DataRow 對象,結果產生初始
DataSet 的子集。該子集通常較小,因此可以更有效率地傳遞迴中介層組件。然後,中介層組件通過預存程序使用更改來更新初始資料來源。然後,中介層可以發送回一個新的
DataSet ,其中包含資料來源中的初始資料和最新資料(通過再次運行初始查詢);或者它可以發送回包含從資料來源對其進行的所有更改的子集。(例如,如果資料來源自動建立唯一主索引值,則可以將這些值傳播回用戶端應用程式。)在哪一種情況下都可以使用
Merge 方法將返回的
DataSet 合并回用戶端應用程式的初始
DataSet 。


當調用
Merge 方法時,由於架構可能已更改,因此對兩個
DataSet 對象的架構進行比較。例如,在企業對企業的情況下,可能已經通過自動過程將新列添加到 XML 結構描述中。如果源
DataSet 包含目標中缺少的架構元素(已添加的
DataColumn 對象),則可以通過將 missingSchemaAction 參數設定為 MissingSchemaAction.Add 將該架構元素添加到目標中。在這種情況下,合并的
DataSet 包含已添加的架構和資料。


合并架構之後合并資料。


當將新的源
DataSet 合并到目標中時,
DataRowState 值為 Unchanged 、Modified 或 Deleted 的任何源行都會與具有相同主索引值的目標行進行匹配。DataRowState 值為 Added 的源行匹配那些與新源行具有相同主索引值的新目標行。


合并過程中將禁用約束。如果在合并結束時無法啟用任何約束,則會在禁用約束的同時產生
ConstraintException 並保留合并的資料。這種情況下,
EnforceConstraints 屬性將設定為 false ,並且所有無效行都會標記為出錯。在試圖將
EnforceConstraints 屬性重設為 true 之前,必須消除這些錯誤。 樣本 下面的樣本針對
DataSet 使用

GetChanges 、Update 和
Merge 方法。



C#




private void DemonstrateMerge() 
{
// Create a DataSet with one table, two columns, and three rows.
DataSet dataSet = new DataSet("dataSet");
DataTable table = new DataTable("Items");
DataColumn idColumn = new DataColumn("id",
Type.GetType("System.Int32"));
idColumn.AutoIncrement=true;
DataColumn itemColumn = new DataColumn("Item",
Type.GetType("System.Int32"));

// DataColumn array to set primary key.
DataColumn[] keyColumn= new DataColumn[1];
DataRow row;

// Create variable for temporary DataSet.
DataSet changeDataSet;

// Add columns to table, and table to DataSet.
table.Columns.Add(idColumn);
table.Columns.Add(itemColumn);
dataSet.Tables.Add(table);

// Set primary key column.
keyColumn[0]= idColumn;
table.PrimaryKey=keyColumn;

// Add ten rows.
for(int i = 0; i <10;i++)
{
row=table.NewRow();
row["Item"]= i;
table.Rows.Add(row);
}

// Accept changes.
dataSet.AcceptChanges();
PrintValues(dataSet, "Original values");

// Change two row values.
table.Rows[0]["Item"]= 50;
table.Rows[1]["Item"]= 111;

// Add one row.
row=table.NewRow();
row["Item"]=74;
table.Rows.Add(row);

// Insert code for error checking. Set one row in error.
table.Rows[1].RowError= "over 100";
PrintValues(dataSet, "Modified and New Values");
// If the table has changes or errors, create a subset DataSet.
if(dataSet.HasChanges(DataRowState.Modified |
DataRowState.Added)& dataSet.HasErrors)
{
// Use GetChanges to extract subset.
changeDataSet = dataSet.GetChanges(
DataRowState.Modified|DataRowState.Added);
PrintValues(changeDataSet, "Subset values");
// Insert code to reconcile errors. In this case reject changes.
foreach(DataTable changeTable in changeDataSet.Tables)
{
if (changeTable.HasErrors)
{
foreach(DataRow changeRow in changeTable.Rows)
{
//Console.WriteLine(changeRow["Item"]);
if((int)changeRow["Item",
DataRowVersion.Current ]> 100)
{
changeRow.RejectChanges();
changeRow.ClearErrors();
}
}
}
}
PrintValues(changeDataSet, "Reconciled subset values");
// Merge changes back to first DataSet.
dataSet.Merge(changeDataSet);
PrintValues(dataSet, "Merged Values");
}
}

private void PrintValues(DataSet dataSet, string label)
{
Console.WriteLine("/n" + label);
foreach(DataTable table in dataSet.Tables)
{
Console.WriteLine("TableName: " + table.TableName);
foreach(DataRow row in table.Rows)
{
foreach(DataColumn column in table.Columns)
{
Console.Write("/table " + row[column] );
}
Console.WriteLine();
}
}
}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.