다음을 통해 공유


DataSet.GetChanges 메서드

정의

마지막으로 로드되거나 DataSet가 호출된 후에 변경된 내용이 모두 들어 있는 AcceptChanges()의 복사본을 가져옵니다.

오버로드

GetChanges()

로드되거나 DataSet가 마지막으로 호출된 후에 변경된 내용이 모두 들어 있는 AcceptChanges()의 복사본을 가져옵니다.

GetChanges(DataRowState)

마지막으로 로드되거나 DataSet가 호출된 후에 변경되어 AcceptChanges()를 기준으로 필터링된 내용이 모두 들어 있는 DataRowState의 복사본을 가져옵니다.

GetChanges()

Source:
DataSet.cs
Source:
DataSet.cs
Source:
DataSet.cs

로드되거나 DataSet가 마지막으로 호출된 후에 변경된 내용이 모두 들어 있는 AcceptChanges()의 복사본을 가져옵니다.

public:
 System::Data::DataSet ^ GetChanges();
public System.Data.DataSet? GetChanges ();
public System.Data.DataSet GetChanges ();
member this.GetChanges : unit -> System.Data.DataSet
Public Function GetChanges () As DataSet

반환

작업을 수행한 다음 DataSet를 사용하여 다시 병합할 수 있는 경우 이 Merge(DataSet)의 변경 사항 복사본을 반환합니다. 변경된 행이 없으면 메서드는 null을 반환합니다.

예제

다음 예제에서는 테이블 1개, 열 2개, 행 10개를 사용하여 간단한 DataSet 을 만듭니다. 두 개의 값이 변경되고 한 행이 추가됩니다. 변경된 데이터의 하위 집합은 메서드를 GetChanges 사용하여 만들어집니다. 오류를 조정한 후 스키마를 변경하여 하위 집합에 새 열이 추가됩니다. Merge 를 로 설정하여 메서드를 missingSchemaAction 호출하면 MissingSchemaAction.Add새 열이 원래 DataSet 개체의 스키마에 추가됩니다.

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();
        }
    }
}
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(0) 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

설명

보류 중인 변경 내용이 있는 원본 DataSet 의 모든 행 복사본을 포함하는 새 DataSet 을 만듭니다. 관계 제약 조건으로 인해 변경되지 않은 행에 변경된 행의 외설 키에 해당하는 기본 키가 포함된 경우 변경되지 않은 추가 행이 새 DataSet 행에 추가될 수 있습니다. 메서드는 보류 중인 변경 내용이 있는 원래 DataSet 행이 없으면 를 반환 null 합니다.

추가 정보

적용 대상

GetChanges(DataRowState)

Source:
DataSet.cs
Source:
DataSet.cs
Source:
DataSet.cs

마지막으로 로드되거나 DataSet가 호출된 후에 변경되어 AcceptChanges()를 기준으로 필터링된 내용이 모두 들어 있는 DataRowState의 복사본을 가져옵니다.

public:
 System::Data::DataSet ^ GetChanges(System::Data::DataRowState rowStates);
public System.Data.DataSet? GetChanges (System.Data.DataRowState rowStates);
public System.Data.DataSet GetChanges (System.Data.DataRowState rowStates);
member this.GetChanges : System.Data.DataRowState -> System.Data.DataSet
Public Function GetChanges (rowStates As DataRowState) As DataSet

매개 변수

rowStates
DataRowState

DataRowState 값 중 하나입니다.

반환

작업을 수행한 다음 DataSet를 사용하여 다시 병합할 수 있는 경우 Merge(DataSet)의 필터링된 복사본을 반환합니다. 원하는 DataRowState 행이 없으면 이 메서드는 null을 반환합니다.

예제

다음 예제에서는 메서드를 GetChanges 사용하여 두 번째 DataSet 개체를 만든 다음 데이터 원본을 업데이트하는 데 사용됩니다.

private void UpdateDataSet(DataSet dataSet)
{
    // Check for changes with the HasChanges method first.
    if(!dataSet.HasChanges(DataRowState.Modified)) return;

    // Create temporary DataSet variable and
    // GetChanges for modified rows only.
    DataSet tempDataSet =
        dataSet.GetChanges(DataRowState.Modified);

    // Check the DataSet for errors.
    if(tempDataSet.HasErrors)
    {
        // Insert code to resolve errors.
    }
    // After fixing errors, update the data source with
    // the DataAdapter used to create the DataSet.
    adapter.Update(tempDataSet);
}
Private Sub UpdateDataSet(ByVal dataSet As DataSet)
   ' Check for changes with the HasChanges method first.
   If Not dataSet.HasChanges(DataRowState.Modified) Then 
       Exit Sub
   End If

   ' Create temporary DataSet variable and
   ' GetChanges for modified rows only.
   Dim tempDataSet As DataSet = _
       dataSet.GetChanges(DataRowState.Modified)

   ' Check the DataSet for errors.
   If tempDataSet.HasErrors Then
      ' Insert code to resolve errors.
   End If

   ' After fixing errors, update the data source with   
   ' the DataAdapter used to create the DataSet.
   adapter.Update(tempDataSet)
End Sub

설명

메서드는 GetChanges 원래에 도입 된 변경 내용만 포함 하는 두 번째 DataSet 개체를 생성 하는 데 사용 됩니다. 인수를 rowStates 사용하여 새 개체에 포함해야 하는 변경 형식을 지정합니다.

반환된 이 복사본은 이 원래 DataSet에 다시 병합되도록 설계되었습니다. 관계 제약 조건으로 인해 부모 행이 포함되도록 표시 Unchanged 될 수 있습니다. 원하는 DataRowState 행을 찾을 수 없는 경우 메서드는 GetChanges 를 반환합니다 null.

추가 정보

적용 대상