DataAdapter.AcceptChangesDuringUpdate Tulajdonság

Definíció

Lekérdezi vagy beállítja, hogy a rendszer meghívja-e AcceptChanges() egy Update(DataSet).

public:
 property bool AcceptChangesDuringUpdate { bool get(); void set(bool value); };
public bool AcceptChangesDuringUpdate { get; set; }
member this.AcceptChangesDuringUpdate : bool with get, set
Public Property AcceptChangesDuringUpdate As Boolean

Tulajdonság értéke

true ha AcceptChanges() egy ; alatt van meghívva Update(DataSet), ellenkező esetben false. Az alapértelmezett érték a true.

Példák

Ez a példa bemutatja, hogy a módosított sorok kinyerése egy DataTable-ből, az SqlDataAdapter-t használva az adatforrás frissítésére és egy új identitásoszlop-érték lekérése hogyan történik. Az eredeti automatikus növekmény értékének megőrzéséhez AcceptChangesDuringUpdate a tulajdonság beállításával SqlDataAdapter az új adatok egyesíthetők az eredetivelfalse, még akkor is, ha az új identitás értéke nem egyezik meg az eredeti automatikus növekmény értékével a DataTablefájlban.DataTable

private static void MergeIdentityColumns(string connectionString)
{
    using (SqlConnection connection =
               new SqlConnection(connectionString))
    {
        // Create the DataAdapter
        SqlDataAdapter adapter =
            new SqlDataAdapter(
            "SELECT ShipperID, CompanyName FROM dbo.Shippers",
            connection);

        //Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = new SqlCommand(
            "INSERT INTO dbo.Shippers (CompanyName) " +
            "VALUES (@CompanyName); " +
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " +
            "WHERE ShipperID = SCOPE_IDENTITY();", connection);

        // Set AcceptChangesDuringUpdate to false
        adapter.AcceptChangesDuringUpdate = false;

        // Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add(
           new SqlParameter("@CompanyName", SqlDbType.NVarChar, 40,
           "CompanyName"));
        adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.Both;

        // MissingSchemaAction adds any missing schema to
        // the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;

        // Fill a DataTable.
        DataTable shipper = new DataTable();
        adapter.Fill(shipper);

        // Add a new shipper row.
        DataRow newRow = shipper.NewRow();
        newRow["CompanyName"] = "New Shipper";
        shipper.Rows.Add(newRow);

        // Add changed rows to a new DataTable. This
        // DataTable will be used to update the data source.
        DataTable dataChanges = shipper.GetChanges();

        adapter.Update(dataChanges);
        connection.Close();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowBefore in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowBefore[0], rowBefore[1]);
            }
        }

        // Merge the two DataTables to get new values.
        shipper.Merge(dataChanges);

        // Commit the changes.
        shipper.AcceptChanges();

        Console.WriteLine("Rows after merge.");
        foreach (DataRow rowAfter in shipper.Rows)
        {
            {
                Console.WriteLine("{0}: {1}", rowAfter[0], rowAfter[1]);
            }
        }
    }
}
Private Sub MergeIdentityColumns(ByVal connectionString As String)

    Using connection As SqlConnection = New SqlConnection( _
       connectionString)

        ' Create the DataAdapter
        Dim adapter As SqlDataAdapter = New SqlDataAdapter( _
          "SELECT ShipperID, CompanyName FROM dbo.Shippers", connection)

        ' Add the InsertCommand to retrieve new identity value.
        adapter.InsertCommand = New SqlCommand( _
            "INSERT INTO dbo.Shippers (CompanyName) " & _
            "VALUES (@CompanyName); " & _
            "SELECT ShipperID, CompanyName FROM dbo.Shippers " & _
            "WHERE ShipperID = SCOPE_IDENTITY();", _
            connection)

        ' Set AcceptChangesDuringUpdate to false.
        adapter.AcceptChangesDuringUpdate = False

        ' Add the parameter for the inserted value.
        adapter.InsertCommand.Parameters.Add( _
           New SqlParameter("@CompanyName", SqlDbType.NVarChar, 40, _
           "CompanyName"))
        adapter.InsertCommand.UpdatedRowSource = _
           UpdateRowSource.FirstReturnedRecord

        ' MissingSchemaAction adds any missing schema to 
        ' the DataTable, including auto increment columns
        adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey

        ' Fill a DataTable.
        Dim shipper As New DataTable
        adapter.Fill(shipper)

        ' Add a new shipper row. 
        Dim newRow As DataRow = shipper.NewRow()
        newRow("CompanyName") = "New Shipper"
        shipper.Rows.Add(newRow)

        ' Add changed rows to a new DataTable. This
        ' DataTable will be used to update the data source.
        Dim dataChanges As DataTable = shipper.GetChanges()

        ' Update the data source with the modified records.
        adapter.Update(dataChanges)

        Console.WriteLine("Rows before merge.")
        Dim rowBefore As DataRow
        For Each rowBefore In shipper.Rows
            Console.WriteLine("{0}: {1}", rowBefore(0), rowBefore(1))
        Next

        ' Merge the two DataTables to get new values.
        shipper.Merge(dataChanges)

        ' Commit the changes.
        shipper.AcceptChanges()

        Console.WriteLine("Rows after merge.")
        Dim rowAfter As DataRow
        For Each rowAfter In shipper.Rows
            Console.WriteLine("{0}: {1}", rowAfter(0), rowAfter(1))
        Next
    End Using
End Sub

Megjegyzések

Egy UpdateDataAdapter metódusának hívása során az adatbázis adatokat küldhet vissza az ADO.NET alkalmazásnak kimeneti paraméterként vagy egy eredményhalmaz első visszaadott rekordjaként. ADO.NET lekérheti ezeket az értékeket, és frissítheti a megfelelő oszlopokat a DataRow frissítés során. Alapértelmezés szerint az ADO.NET meghívja a AcceptChangesDataRow metódusát a frissítés után. Ha azonban vissza szeretné egyesíteni a frissített sort egy másikba DataTable, érdemes lehet megőriznie egy elsődleges kulcsoszlop eredeti értékét. Az adatbázis automatikusan növekvő oszlopának (például identitásoszlopnak) megfelelő elsődleges kulcsoszlop például olyan új értékeket tartalmazhat, amelyeket az adatbázis hozzárendelt, és nem egyeznek meg az eredeti értékekkel.DataRow Alapértelmezés szerint a AcceptChanges implicit módon lesz meghívva egy frissítés után, és az A.NET DO által hozzárendelt AutoIncrement értékek eredeti értékei elvesznek. A DataRow eredeti értékeit megőrizheti, ha megakadályozza, hogy ADO.NET meghívja a AcceptChanges, miután végrehajtott egy frissítést egy sorban. Ehhez állítsa a AcceptChangesDuringUpdate tulajdonságot false értékre, amely megőrzi az eredeti értékeket.

Note

A tulajdonság AcceptChangesDuringUpdate beállítása az false összes adatmódosításra, nem csak a beszúrásokra. Ha ugyanabban a frissítésben szeretné szerkeszteni vagy törölni a sorokat, és csak beszúrások esetén szeretné letiltani a hívástAcceptChanges, akkor a beállítás AcceptChangesDuringUpdatefalse helyett használjon eseménykezelőt az RowUpdatedDataAdaptereseményhez. Az eseménykezelőben ellenőrizheti StatementType , hogy az adatmódosítás beszúrás-e, és ha true, állítsa a Status tulajdonságot a RowUpdatedEventArgs következőre SkipCurrentRow. További információkért és egy példáért lásd: Azonosító vagy Autonumber értékek beolvasása.

A következőre érvényes:

Lásd még