DataSet..::.Merge 方法 (DataSet)
来源:互联网 发布:知网统计年鉴数据库 编辑:程序博客网 时间:2024/05/06 08:53
将指定的 DataSet 及其架构合并到当前 DataSet 中。
命名空间: System.Data
程序集: System.Data(在 System.Data.dll 中)
无法启用一个或多个约束。 dataSet 为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing)。 DataSet 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 GetChanges、Update 和 public void Merge(
DataSet dataSet
)参数
System.Data..::.DataSet
其数据和架构将被合并的 DataSet。 异常 条件 ConstraintException
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 使用
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();
}
}
}
- DataSet..::.Merge 方法 (DataSet)
- DataSet 的 Merge 方法
- DataSet 的 Merge 方法研究
- DataSet 的 Merge()
- DataSet
- DataSet
- DataSet
- DataSet
- DataSet
- dataset
- DataSet
- DataSet
- DataSet
- dataSet
- DataSet
- DataSet
- dataset
- DataSet
- Release版本调试
- 为什么要对齐及利弊
- 用户、权限、角色(1)- 用户管理
- 朋友就是把你看透了,还能喜欢你的人。
- 警惕CRM范围渐变的陷阱
- DataSet..::.Merge 方法 (DataSet)
- 继承ContextBoundObject以实现自动锁
- JSP,servlet的相对路径问题
- Delphi常用数据类型:char, array of char, PChar
- 2009-07-02 TIPTOP
- 如何求一个int型数的绝对值?
- FORM中使用onSubmit="return false"防止表单自动提交
- [学习笔记の工具集合]Microsoft Silverlight开发工具及下载地址(及时更新中…...)
- c#.net使用oledb读取excel