DataSet.Mergeとは? わかりやすく解説

DataSet.Merge メソッド (DataSet, Boolean)

指定した DataSet およびそのスキーマ現在の DataSetマージます。この DataSet に対して行われた変更は、指定した引数に従って保持または破棄します。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

使用例使用例

1 つテーブル、2 列、および 10 行で単純な DataSet作成する例を次に示します10追加した後、2 つの値を変更し、1 行追加します変更されデータサブセットは、GetChanges メソッド使用して作成されます。エラー調整した後、サブセット データを元の DataSetマージます。

Private Sub DemonstrateMerge()
    ' Create a DataSet with one table, two columns, 
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New
 DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New
 DataColumn("Item", _
        Type.GetType("System.Int32"), "")

    ' Create DataColumn array to set primary key.
    Dim keyColumn(1) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet. 
    Dim changesDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf
 Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

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

    ' Change 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 Or
 DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changesDataSet = dataSet.GetChanges( _
            DataRowState.Modified Or DataRowState.Added)
        PrintValues(changesDataSet, "Subset values")

        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changesTable As DataTable
        For Each changesTable In
  changesDataSet.Tables
            If changesTable.HasErrors Then
                Dim changesRow As DataRow
                For Each changesRow In
  changesTable.Rows
                    'Console.WriteLine(changesRow["Item"]);
                    If CInt(changesRow("Item",
 _
                        DataRowVersion.Current)) > 100 Then
                        changesRow.RejectChanges()
                        changesRow.ClearErrors()
                    End If
                Next changesRow
            End If
        Next changesTable

        ' Add a column to the changesDataSet.
        changesDataSet.Tables("Items").Columns.Add(
 _
            New DataColumn("newColumn"))
        PrintValues(changesDataSet, "Reconciled subset values")

        ' Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub
        
 Private Sub Row_Changed(sender As
 Object, e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " + e.Action.ToString()
 _
        + ControlChars.Tab + e.Row.ItemArray(0).ToString())
 End Sub
    
Private Sub PrintValues(dataSet As
 DataSet, label As String)
     Console.WriteLine(label + ControlChars.Cr)
     Dim table As DataTable
     For Each table In 
 dataSet.Tables
         Console.WriteLine("TableName: " + table.TableName)
         Dim row As DataRow
         For Each row In
  table.Rows
             Dim column As DataColumn
             For Each column In
  table.Columns
                 Console.Write(ControlChars.Tab & " "
 _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub
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 changesDataSet;

    // Add RowChanged event handler for the table.
    table.RowChanged+=new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // 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 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.
        changesDataSet = dataSet.GetChanges(
            DataRowState.Modified|DataRowState.Added);
        PrintValues(changesDataSet, "Subset values");

        // Insert code to reconcile errors. In this case, reject changes.
        foreach(DataTable changesTable in changesDataSet.Tables)
        {
            if (changesTable.HasErrors)
            {
                foreach(DataRow changesRow in
 changesTable.Rows)
                {
                    //Console.WriteLine(changesRow["Item"]);
                    if((int)changesRow["Item",DataRowVersion.Current
 ]> 100)
                    {
                        changesRow.RejectChanges();
                        changesRow.ClearErrors();
                    }
                }
            }
        }
        // Add a column to the changesDataSet.
        changesDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changesDataSet, "Reconciled subset values");
        // Merge changes back to first DataSet.
        dataSet.Merge(changesDataSet, false, 
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}
 
private void Row_Changed(object sender, DataRowChangeEventArgs
 e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString() 
        + "\table" + e.Row.ItemArray[0]);
}
 
private void PrintValues(DataSet dataSet, string
 label)
{
    Console.WriteLine(label + "\n");
    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 メソッド (DataRow[])

DataRow オブジェクト配列現在の DataSetマージます。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Sub Merge ( _
    rows As DataRow() _
)
Dim instance As DataSet
Dim rows As DataRow()

instance.Merge(rows)
public void Merge (
    DataRow[] rows
)
public:
void Merge (
    array<DataRow^>^ rows
)
public void Merge (
    DataRow[] rows
)
public function Merge (
    rows : DataRow[]
)

パラメータ

rows

DataSetマージされる DataRow オブジェクト配列

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

DataSet.Merge メソッド (DataSet)

指定した DataSet およびそのスキーマ現在の DataSetマージます。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

例外例外
例外種類条件

ConstraintException

1 つ上の制約有効にできません。

ArgumentNullException

dataSetnull 参照 (Visual Basic では Nothing) です。

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

使用例使用例

DataSetGetChangesUpdateMerge の各メソッド使用する例を次に示します

 Private Sub DemonstrateMerge()
     ' Create a DataSet with one table, two columns, and three rows.
     Dim dataSet As New
 DataSet("dataSet")
     Dim table As New DataTable("Items")
     Dim idColumn As New
 DataColumn("id", Type.GetType("System.Int32"))
     idColumn.AutoIncrement = True
     Dim itemColumn As New
 DataColumn("Item", Type.GetType("System.Int32"))

     ' DataColumn array to set primary key.
     Dim keyColumn(1) As DataColumn
     Dim row As DataRow

     ' Create variable for temporary DataSet. 
     Dim changeDataSet As DataSet

     ' 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.
     Dim i As Integer
     For i = 0 To 9
         row = table.NewRow()
         row("Item") = i
         table.Rows.Add(row)
     Next i

     ' 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 Or
 DataRowState.Added) _
        And dataSet.HasErrors Then

         ' Use GetChanges to extract subset.
         changeDataSet = dataSet.GetChanges(DataRowState.Modified _
            Or DataRowState.Added)
         PrintValues(changeDataSet, "Subset values")

         ' Insert code to reconcile errors. In this case, reject changes.
         Dim changeTable As DataTable
         For Each changeTable In
  changeDataSet.Tables
             If changeTable.HasErrors Then
                 Dim changeRow As DataRow
                 For Each changeRow In
  changeTable.Rows
                     'Console.WriteLine(changeRow["Item"]);
                     If CInt(changeRow("Item",
 _
                        DataRowVersion.Current)) > 100 Then
                         changeRow.RejectChanges()
                         changeRow.ClearErrors()
                     End If
                 Next changeRow
             End If
         Next changeTable
         PrintValues(changeDataSet, "Reconciled subset values")

         ' Merge changes back to first DataSet.
         dataSet.Merge(changeDataSet)
         PrintValues(dataSet, "Merged Values")
     End If
 End Sub
 
Private Sub PrintValues(dataSet As
 DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     For Each table In 
 dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
         Dim row As DataRow
         For Each row In
  table.Rows
             Dim column As DataColumn
             For Each column In
  table.Columns
                 Console.Write(ControlChars.Tab & " "
 _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
End Sub
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 メソッド (DataTable)

指定した DataTable およびそのスキーマ現在の DataSetマージます。

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Sub Merge ( _
    table As DataTable _
)
Dim instance As DataSet
Dim table As DataTable

instance.Merge(table)
public void Merge (
    DataTable table
)
public:
void Merge (
    DataTable^ table
)
public void Merge (
    DataTable table
)

パラメータ

table

マージするデータスキーマ格納されている DataTable。

例外例外
例外種類条件

ArgumentNullException

dataSetnull 参照 (Visual Basic では Nothing) です。

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更されDataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

使用例使用例

1 つテーブル、2 列、および 10 行で単純な DataSet作成する例を次に示します最初DataTable と同じテーブルをもう 1 つ作成します2 つ目のテーブルに 2 行追加し、このテーブルDataSetマージます。

Private Sub DemonstrateMergeTable()
    ' Create a DataSet with one table, two columns, 
    ' and ten rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")

    ' Add tables to the DataSet
    dataSet.Tables.Add(table)

    ' Add columns
    Dim c1 As New DataColumn("id",
 Type.GetType("System.Int32"), "")
    Dim c2 As New DataColumn("Item",
 Type.GetType("System.Int32"), "")
    table.Columns.Add(c1)
    table.Columns.Add(c2)

    ' DataColumn array to set primary key.
    Dim keyCol(1) As DataColumn

    ' Set primary key column.
    keyCol(0) = c1
    table.PrimaryKey = keyCol

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf
 Row_Changed

    ' Add ten rows.
    Dim i As Integer
    Dim row As DataRow

    For i = 0 To 9
        row = table.NewRow()
        row("id") = i
        row("Item") = i
        table.Rows.Add(row)
    Next i

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

    ' Create a second DataTable identical to the first.
    Dim t2 As DataTable
    t2 = table.Clone()

    ' Add three rows. Note that the id column can't be the 
    ' same as existing rows in the DataSet table.
    Dim newRow As DataRow
    newRow = t2.NewRow()
    newRow("id") = 14
    newRow("Item") = 774
    t2.Rows.Add(newRow)

    newRow = t2.NewRow()
    newRow("id") = 12
    newRow("Item") = 555
    t2.Rows.Add(newRow)

    newRow = t2.NewRow()
    newRow("id") = 13
    newRow("Item") = 665
    t2.Rows.Add(newRow)

    ' Merge the table into the DataSet.
    Console.WriteLine("Merging")
    dataSet.Merge(t2)
    PrintValues(dataSet, "Merged With Table")
 End Sub 
     
 Private Sub Row_Changed( _
    sender As Object, e As
 DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " & e.Action.ToString()
 _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
 End Sub 'Row_Changed
 
 Private Sub PrintValues(dataSet As
 DataSet, label As String)
     Console.WriteLine(ControlChars.Cr & label)
     Dim table As DataTable
     Dim row As DataRow
     Dim column As DataColumn
     For Each table In 
 dataSet.Tables
         Console.WriteLine("TableName: " & table.TableName)
 
         For Each row In
  table.Rows             
             For Each column In
  table.Columns
                 Console.Write(ControlChars.Tab & " "
 _
                    & row(column).ToString())
             Next column
             Console.WriteLine()
         Next row
     Next table
 End Sub
private void DemonstrateMergeTable()
{
    // Create a DataSet with one table, two columns, and ten rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");

    // Add table to the DataSet
    dataSet.Tables.Add(table);

    // Add columns
    DataColumn c1 = new DataColumn("id", 
        Type.GetType("System.Int32"),"");
    DataColumn c2 = new DataColumn("Item", 
        Type.GetType("System.Int32"),"");
    table.Columns.Add(c1);
    table.Columns.Add(c2);

    // DataColumn array to set primary key.
    DataColumn[] keyCol= new DataColumn[1];

    // Set primary key column.
    keyCol[0]= c1;
    table.PrimaryKey=keyCol;

    // Add a RowChanged event handler for the table.
    table.RowChanged += new 
        DataRowChangeEventHandler(Row_Changed);

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

    PrintValues(dataSet, "Original values");

    // Create a second DataTable identical to the first.
    DataTable t2 = table.Clone();

    // Add three rows. Note that the id column can'te be the
    // same as existing rows in the DataSet table.
    DataRow newRow;
    newRow = t2.NewRow();
    newRow["id"] = 14;
    newRow["item"] = 774;

    //Note the alternative method for adding rows.
    t2.Rows.Add(new Object[] { 12, 555 });
    t2.Rows.Add(new Object[] { 13, 665 });

    // Merge the table into the DataSet
    Console.WriteLine("Merging");
    dataSet.Merge(t2);
    PrintValues(dataSet, "Merged With table.");

}
 
private void Row_Changed(object sender, 
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString() 
        + "\table" + e.Row.ItemArray[0]);
}
 
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 メソッド (DataTable, Boolean, MissingSchemaAction)

指定した DataTable およびそのスキーマ現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Sub Merge ( _
    table As DataTable, _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
Dim instance As DataSet
Dim table As DataTable
Dim preserveChanges As Boolean
Dim missingSchemaAction As MissingSchemaAction

instance.Merge(table, preserveChanges, missingSchemaAction)
public void Merge (
    DataTable table,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge (
    DataTable^ table, 
    bool preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public void Merge (
    DataTable table, 
    boolean preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public function Merge (
    table : DataTable, 
    preserveChanges : boolean, 
    missingSchemaAction : MissingSchemaAction
)

パラメータ

table

データスキーママージする対象DataTable

preserveChanges

MissingSchemaAction 値の 1 つ

missingSchemaAction

DataSet に対して行われた変更保持するには true保持しない場合false

例外例外
例外種類条件

ArgumentNullException

dataSetnull 参照 (Visual Basic では Nothing) です。

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更されDataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

使用例使用例

1 つテーブル、2 列、および 10 行で単純な DataSet作成する例を次に示します最初DataTable似ている新しDataColumn追加される点で異なる、2 つ目のテーブル作成します2 つ目のテーブル2 つの行を追加した後、引数 preserveChangesfalse引数 missingSchemaActionMissingSchemaAction.Add設定した DataSet にこのテーブルマージます。

Private Sub DemonstrateMergeTableAddSchema()
    ' Create a DataSet with one table, two columns, 
    'and ten rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")

    ' Add tables to the DataSet
    dataSet.Tables.Add(table)

    ' Create and add two columns to the DataTable
    Dim idColumn As New
 DataColumn("id", _
        Type.GetType("System.Int32"), "")
    idColumn.AutoIncrement = True
    Dim itemColumn As New
 DataColumn("Item", _
        Type.GetType("System.Int32"), "")
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' DataColumn array to set primary key.
    Dim keyCol(1) As DataColumn

    ' Set primary key column.
    keyCol(0) = idColumn
    table.PrimaryKey = keyCol

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf
 Row_Changed

    ' Add ten rows.
    Dim i As Integer
    Dim row As DataRow

    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

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

    ' Create a second DataTable identical to the first
    ' with one extra column using the Clone method.
    Dim cloneTable As New
 DataTable
    cloneTable = table.Clone()

    ' Add column.
    cloneTable.Columns.Add("extra", _
        Type.GetType("System.String"))

    ' Add two rows. Note that the id column can't be the 
    ' same as existing rows in the DataSet table.
    Dim newRow As DataRow
    newRow = cloneTable.NewRow()
    newRow("id") = 12
    newRow("Item") = 555
    newRow("extra") = "extra Column
 1"
    cloneTable.Rows.Add(newRow)
        
    newRow = cloneTable.NewRow()
    newRow("id") = 13
    newRow("Item") = 665
    newRow("extra") = "extra Column
 2"
    cloneTable.Rows.Add(newRow)

    ' Merge the table into the DataSet.
    Console.WriteLine("Merging")
    dataSet.Merge(cloneTable, False, MissingSchemaAction.Add)
    PrintValues(dataSet, "Merged With Table, Schema Added")
End Sub
  
Private Sub Row_Changed(sender As
 Object, _
    e As DataRowChangeEventArgs)
    Console.WriteLine("Row Changed " & e.Action.ToString()
 _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub
    
Private Sub PrintValues(dataSet As
 DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    Dim row As DataRow
    Dim column As DataColumn
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        For Each row In
  table.Rows             
            For Each column In
  table.Columns
                Console.Write(ControlChars.Tab & " "
 _
                    & row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
 End Sub
private void DemonstrateMergeTableAddSchema()
{
    // Create a DataSet with one table, two columns, and ten rows.
    DataSet dataSet = new DataSet("dataSet");
    DataTable table = new DataTable("Items");

    // Add table to the DataSet
    dataSet.Tables.Add(table);

    // Create and add two columns to the DataTable
    DataColumn idColumn = new DataColumn("id", 
        Type.GetType("System.Int32"),"");
    idColumn.AutoIncrement=true;
    DataColumn itemColumn = new DataColumn("Item", 
        Type.GetType("System.Int32"),"");
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // Set the primary key to the first column.
    table.PrimaryKey = new DataColumn[1]{ idColumn };

    // Add RowChanged event handler for the table.
    table.RowChanged+= new DataRowChangeEventHandler(Row_Changed);

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

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

    // Create a second DataTable identical to the first, with
    // one extra column using the Clone method.
    DataTable cloneTable = table.Clone();
    cloneTable.Columns.Add("extra", typeof(string));

    // Add two rows. Note that the id column can'table be the 
    // same as existing rows in the DataSet table.
    DataRow newRow;
    newRow=cloneTable.NewRow();
    newRow["id"]= 12;
    newRow["Item"]=555;
    newRow["extra"]= "extra Column 1";
    cloneTable.Rows.Add(newRow);
 
    newRow=cloneTable.NewRow();
    newRow["id"]= 13;
    newRow["Item"]=665;
    newRow["extra"]= "extra Column 2";
    cloneTable.Rows.Add(newRow);

    // Merge the table into the DataSet.
    Console.WriteLine("Merging");
    dataSet.Merge(cloneTable,false,MissingSchemaAction.Add);
    PrintValues(dataSet, "Merged With Table, Schema Added");
}
 
private void Row_Changed(object sender, 
    DataRowChangeEventArgs e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString() 
        + "\table" + e.Row.ItemArray[0]);
}
 
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 メソッド (DataRow[], Boolean, MissingSchemaAction)

DataRow オブジェクト配列現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Sub Merge ( _
    rows As DataRow(), _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
Dim instance As DataSet
Dim rows As DataRow()
Dim preserveChanges As Boolean
Dim missingSchemaAction As MissingSchemaAction

instance.Merge(rows, preserveChanges, missingSchemaAction)
public void Merge (
    DataRow[] rows,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge (
    array<DataRow^>^ rows, 
    bool preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public void Merge (
    DataRow[] rows, 
    boolean preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public function Merge (
    rows : DataRow[], 
    preserveChanges : boolean, 
    missingSchemaAction : MissingSchemaAction
)

パラメータ

rows

DataSetマージされる DataRow オブジェクト配列

preserveChanges

DataSet に対して行われた変更保持するには true保持しない場合false

missingSchemaAction

MissingSchemaAction 値の 1 つ

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド説明するため、現在の DataSet を "ターゲット"、2 番目の (パラメータ) DataSet を "ソース" と呼ぶことにします。ターゲット DataSetアクション (マージ) の対象であるため、それに応じた前になります2 番目の DataSet含まれる情報変化せず現在の DataSetマージされるため、"ソース" になります

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

DataSet.Merge メソッド (DataSet, Boolean, MissingSchemaAction)

指定した DataSet およびそのスキーマ現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

名前空間: System.Data
アセンブリ: System.Data (system.data.dll 内)
構文構文

Public Sub Merge ( _
    dataSet As DataSet, _
    preserveChanges As Boolean, _
    missingSchemaAction As MissingSchemaAction _
)
Dim instance As DataSet
Dim dataSet As DataSet
Dim preserveChanges As Boolean
Dim missingSchemaAction As MissingSchemaAction

instance.Merge(dataSet, preserveChanges, missingSchemaAction)
public void Merge (
    DataSet dataSet,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
public:
void Merge (
    DataSet^ dataSet, 
    bool preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public void Merge (
    DataSet dataSet, 
    boolean preserveChanges, 
    MissingSchemaAction missingSchemaAction
)
public function Merge (
    dataSet : DataSet, 
    preserveChanges : boolean, 
    missingSchemaAction : MissingSchemaAction
)

パラメータ

dataSet

データスキーママージする対象DataSet

preserveChanges

現在の DataSet に対して行われた変更保持するには true保持しない場合false

missingSchemaAction

MissingSchemaAction 値の 1 つ

例外例外
例外種類条件

ArgumentNullException

dataSetnull 参照 (Visual Basic では Nothing) です。

解説解説

Merge メソッド使用してスキーマがほとんど同様の 2 つDataSet オブジェクトマージます。マージは、通常データ ソースから既存DataSet直前変更組み込むために、クライアント アプリケーション使用されます。これにより、クライアント アプリケーション更新されDataSet と、データ ソースからの最新データ入手できます

通常Merge メソッドは、変更の検証エラー調整変更されデータ ソース更新、および最後に既存DataSet更新関係する一連のプロシージャ終わり呼び出されます。

クライアント アプリケーションには、通常変更されデータ収集し、それを中間層コンポーネントに戻す前に検証するためにユーザークリックできる単一ボタンあります。このシナリオでは、初めに GetChanges メソッド呼び出します。このメソッドは、検証マージのために最適化された 2 番目の DataSet返します2 番目の DataSet オブジェクトには、変更された DataTable オブジェクトおよび DataRow オブジェクトだけが含まれ、元の DataSetサブセットなります。このサブセット一般的に小さいため、中間層コンポーネント効率よく渡されます。次に中間層コンポーネントは、ストアド プロシージャ通じて変更のある元のデータ ソース更新します次に中間層は (元のクエリを再び実行することによって) 元のデータデータ ソースからの最新データを含む新しDataSet返信するか、データ ソースから変更加えられサブセット返信できます。たとえば、データ ソース自動的に一意主キー値を作成する場合、その値はクライアント アプリケーション反映できます。どちらの場合にも、返されDataSet は、Merge メソッドで、クライアント アプリケーションの元の DataSetマージできます

Merge メソッド説明するため、現在の DataSet を "ターゲット"、2 番目の (パラメータ) DataSet を "ソース" と呼ぶことにします。ターゲット DataSetアクション (マージ) の対象であるため、それに応じた前になります2 番目の DataSet含まれる情報変化せず現在の DataSetマージされるため、"ソース" になります

Merge メソッド呼び出されたときは、スキーマ変更されている可能性があるため、2 つDataSet オブジェクトスキーマ比較されます。たとえば、B to B シナリオでは、自動処理によって新しい列XML スキーマ追加されていることがありますソース DataSetターゲット不足しているスキーマ要素 (追加された DataColumn オブジェクト) を格納している場合、そのスキーマ要素引数 missingSchemaActionMissingSchemaAction.Add設定してターゲット追加できます。この場合マージされた DataSet は、追加されスキーマデータ格納します

スキーママージ後に、データマージます。

新しソース DataSetターゲットマージする場合、DataRowState 値が UnchangedModified、または Deleted であるすべてのソース行が、同じ主キー値を持つターゲット行と照合されます。DataRowState 値が Addedソース行は、新しソース行と同じ主キー値を持つ新しターゲット行と照合されます。

マージ中に制約無効になりますマージ終了時制約有効にできない場合は、ConstraintException が生成され制約無効になりますが、マージされたデータ保持されます。この場合、EnforceConstraints プロパティfalse設定され無効なすべての行はエラー時にマークされます。エラーは、EnforceConstraints プロパティtrueリセットする前に解決する必要があります

使用例使用例

1 つテーブル、2 列、および 10 行で単純な DataSet作成する例を次に示します2 つの値を変更し、1 行追加します変更されデータサブセットは、GetChanges メソッド使用して作成されます。エラー調整した後、新しい列サブセット追加しスキーマ変更しますmissingSchemaActionMissingSchemaAction.Add設定して Merge メソッド呼び出すと、元の DataSet オブジェクトスキーマ新しい列追加されます。

Private Sub DemonstrateMergeMissingSchema()
    ' Create a DataSet with one table, two columns, 
    ' and three rows.
    Dim dataSet As New DataSet("dataSet")
    Dim table As New DataTable("Items")
    Dim idColumn As New
 DataColumn("id", _
        Type.GetType("System.Int32"))
    idColumn.AutoIncrement = True
    Dim itemColumn As New
 DataColumn("Item", _
        Type.GetType("System.Int32"))

    ' DataColumn array to set primary key.
    Dim keyColumn(1) As DataColumn
    Dim row As DataRow

    ' Create variable for temporary DataSet. 
    Dim changeDataSet As DataSet

    ' Add RowChanged event handler for the table.
    AddHandler table.RowChanged, AddressOf
 Row_Changed
    dataSet.Tables.Add(table)
    table.Columns.Add(idColumn)
    table.Columns.Add(itemColumn)

    ' Set primary key column.
    keyColumn(0) = idColumn
    table.PrimaryKey = keyColumn

    ' Add ten rows.
    Dim i As Integer
    For i = 0 To 9
        row = table.NewRow()
        row("Item") = i
        table.Rows.Add(row)
    Next i

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

    ' Change 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 Or
 DataRowState.Added) _
        And dataSet.HasErrors Then
        ' Use GetChanges to extract subset.
        changeDataSet = dataSet.GetChanges(DataRowState.Modified _
            Or DataRowState.Added)
        PrintValues(changeDataSet, "Subset values")
        ' Insert code to reconcile errors. In this case, reject changes.
        Dim changeTable As DataTable
        For Each changeTable In
  changeDataSet.Tables
            If changeTable.HasErrors Then
                Dim changeRow As DataRow
                For Each changeRow In
  changeTable.Rows
                    If CInt(changeRow("Item",
 _
                        DataRowVersion.Current)) > 100 Then
                        changeRow.RejectChanges()
                        changeRow.ClearErrors()
                    End If
                Next changeRow
            End If
        Next changeTable

        ' Add a column to the changeDataSet to change the schema.
        changeDataSet.Tables("Items").Columns.Add(
 _
            New DataColumn("newColumn"))
        PrintValues(changeDataSet, "Reconciled subset values")

        ' Add values to the rows for each column.
        Dim rowItem As DataRow
        For Each rowItem In
  changeDataSet.Tables("Items").Rows
            rowItem("newColumn") = "my
 new schema value"
        Next rowItem

        ' Merge changes back to first DataSet.
        dataSet.Merge(changeDataSet, False, _
            System.Data.MissingSchemaAction.Add)
    End If
    PrintValues(dataSet, "Merged Values")
End Sub
    
Private Sub Row_Changed(sender As
 Object, _
    e As DataRowChangeEventArgs)
     Console.WriteLine("Row Changed " & e.Action.ToString()
 _
        & ControlChars.Tab & e.Row.ItemArray(0).ToString())
End Sub
 
Private Sub PrintValues(dataSet As
 DataSet, label As String)
    Console.WriteLine(ControlChars.Cr & label)
    Dim table As DataTable
    For Each table In  dataSet.Tables
        Console.WriteLine("TableName: " & table.TableName)
        Dim row As DataRow
        For Each row In
  table.Rows
            Dim column As DataColumn
            For Each column In
  table.Columns
                Console.Write(ControlChars.Tab & " "
 _
                    & row(column).ToString())
            Next column
            Console.WriteLine()
        Next row
    Next table
End Sub
private void DemonstrateMergeMissingSchema()
{
    // 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 RowChanged event handler for the table.
    table.RowChanged+= new DataRowChangeEventHandler(
        Row_Changed);
    dataSet.Tables.Add(table);
    table.Columns.Add(idColumn);
    table.Columns.Add(itemColumn);

    // 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 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. Reject the 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();
                    }
                }
            }
        }
        // Add a column to the changeDataSet to change the schema.
        changeDataSet.Tables["Items"].Columns.Add(
            new DataColumn("newColumn"));
        PrintValues(changeDataSet, "Reconciled subset values");

        // Add values to the rows for each column.
        foreach(DataRow rowItem in changeDataSet.Tables["Items"].Rows)
        {
            rowItem["newColumn"] = "my new schema
 value";
        }
        // Merge changes back to first DataSet.
        dataSet.Merge(changeDataSet, false,
            System.Data.MissingSchemaAction.Add);
    }
    PrintValues(dataSet, "Merged Values");
}
 
private void Row_Changed(object sender, DataRowChangeEventArgs
 e)
{
    Console.WriteLine("Row Changed " + e.Action.ToString() 
        + "\table" + e.Row.ItemArray[0]);
}
 
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 か DataTable、または DataRow オブジェクト配列現在の DataSet または DataTableマージます。
オーバーロードの一覧オーバーロードの一覧

名前 説明
DataSet.Merge (DataRow[]) DataRow オブジェクト配列現在の DataSetマージます。

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataSet) 指定した DataSet およびそのスキーマ現在の DataSetマージます。

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataTable) 指定した DataTable およびそのスキーマ現在の DataSetマージます。

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataSet, Boolean) 指定した DataSet およびそのスキーマ現在の DataSetマージます。この DataSet に対して行われた変更は、指定した引数に従って保持または破棄します。

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataRow[], Boolean, MissingSchemaAction) DataRow オブジェクト配列現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataSet, Boolean, MissingSchemaAction) 指定した DataSet およびそのスキーマ現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

.NET Compact Framework によってサポートされています。

DataSet.Merge (DataTable, Boolean, MissingSchemaAction) 指定した DataTable およびそのスキーマ現在の DataSetマージます。指定した引数に従って、この DataSet行われた変更保持または破棄し互換性のないスキーマ処理します

.NET Compact Framework によってサポートされています。

参照参照

関連項目

DataSet クラス
DataSet メンバ
System.Data 名前空間

その他の技術情報

ADO.NET での DataSet使用
ADO.NET での DataSet使用
ADO.NET での DataSet使用


このページでは「.NET Framework クラス ライブラリ リファレンス」からDataSet.Mergeを検索した結果を表示しています。
Weblioに収録されているすべての辞書からDataSet.Mergeを検索する場合は、下記のリンクをクリックしてください。
 全ての辞書からDataSet.Mergeを検索

英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

カテゴリ一覧

すべての辞書の索引



Weblioのサービス

「DataSet.Merge」の関連用語




DataSet.Mergeのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



DataSet.Mergeのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS