DataAdapter.AcceptChangesDuringUpdate Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
bir Update(DataSet)sırasında çağrılıp çağrılmayacağını AcceptChanges() alır veya ayarlar.
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
Özellik Değeri
true
bir sırasında çağrılırsaAcceptChanges(); çağrılmazsafalse
.Update(DataSet) Varsayılan değer: true
.
Örnekler
Bu örnek, veri kaynağını güncelleştirmek ve yeni bir DataTable
kimlik sütunu değeri almak için bir ve içindeki SqlDataAdapter değiştirilen satırları ayıklamayı gösterir. özgün otomatik artış değerini korumak için false
özelliğini olarak ayarlayarakAcceptChangesDuringUpdate
, yeni kimlik değeri içindeki özgün otomatik artış değeriyle DataTable
eşleşmese bile yeni veriler özgün DataTableSqlDataAdapter ile birleştirilebilir.
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
Açıklamalar
yönteminin DataAdapter
çağrısı Update
sırasında veritabanı, çıkış parametreleri olarak veya sonuç kümesinin ilk döndürülen kaydı olarak verileri ADO.NET uygulamanıza geri gönderebilir. ADO.NET bu değerleri alabilir ve güncelleştirilmekte olan ilgili sütunları DataRow güncelleştirebilir. Varsayılan olarak, ADO.NET güncelleştirmeden sonra yöntemini DataRow
çağırırAcceptChanges
. Ancak, güncelleştirilmiş satırı başka bir DataTableile birleştirmek istiyorsanız, birincil anahtar sütununun özgün değerini korumak isteyebilirsiniz. Örneğin, veritabanındaki kimlik sütunu gibi otomatik olarak artan bir sütuna karşılık gelen birincil anahtar sütunu, veritabanı tarafından atanan ve içinde DataRow
atanan özgün değerlerle eşleşmeyen yeni değerler içerebilir. Varsayılan olarak, AcceptChanges
güncelleştirmeden sonra örtük olarak çağrılır ve satırdaki özgün değerler ADO.NET tarafından atanmış olabilecek AutoIncrement değerler kaybolur. özgün değerleri DataRow
korumak için özelliğini false
olarak ayarlayarakAcceptChangesDuringUpdate, bir satırda güncelleştirme yaptıktan sonra çağrısı AcceptChanges
yapılmasını engelleyerek ADO.NET
içindeki özgün değerleri koruyabilirsiniz.
Not
özelliğinin AcceptChangesDuringUpdate
olarak false
ayarlanması, yalnızca eklemeler için değil, tüm veri değişiklikleri için de geçerlidir. Aynı güncelleştirmedeki satırları düzenlemek veya silmek ve yalnızca eklemeler için çağrısının AcceptChanges
gizlenmesini istiyorsanız, olarak ayarlamak false
AcceptChangesDuringUpdate
yerine , olayının RowUpdated
olay işleyicisini DataAdapter
kullanın. Olay işleyicisinde, veri değişikliğinin StatementType bir ekleme olup olmadığını belirlemek için öğesini denetleyebilirsiniz ve ise true
özelliğini RowUpdatedEventArgs olarak SkipCurrentRowayarlayabilirsinizStatus. Daha fazla bilgi ve örnek için bkz. Kimlik veya Otomatik Sayı Değerlerini Alma.