Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
ADO.NET DataAdapter , veri kaynağındaki verilerde yapılan değişikliklere yanıt vermek için kullanabileceğiniz üç olayı kullanıma sunar. Aşağıdaki tabloda DataAdapter olaylar gösterilmektedir.
| Etkinlik | Açıklama |
|---|---|
RowUpdating |
Bir satırdaki UPDATE, INSERT veya DELETE işlemi (yöntemlerden birine Update yapılan bir çağrıyla) başlamak üzeredir. |
RowUpdated |
Bir satırdaki UPDATE, INSERT veya DELETE işlemi (yöntemlerden birine Update yapılan bir çağrıyla) tamamlanır. |
FillError |
İşlem sırasında bir Fill hata oluştu. |
RowUpdating ve RowUpdated
RowUpdating veri kaynağında DataSet'den bir satıra yapılan herhangi bir güncelleme işlenmeden önce tetiklenir.
RowUpdated , veri kaynağında DataSet bir satıra yapılan herhangi bir güncelleştirme işlendikten sonra oluşturulur. Sonuç olarak, güncelleştirme davranışını gerçekleşmeden önce değiştirmek, güncelleştirme gerçekleştiğinde ek işleme sağlamak, güncelleştirilmiş bir satıra başvuruyu korumak, geçerli güncelleştirmeyi iptal etmek ve daha sonra işlenecek bir toplu işlem için zamanlamak vb. için kullanabilirsiniz RowUpdating .
RowUpdated güncelleştirme sırasında oluşan hatalara ve özel durumlara yanıt vermek için kullanışlıdır.
DataSet ekleyerek hata bilgileri, yeniden deneme mantığı vb. ekleyebilirsiniz.
RowUpdatingEventArgs ve RowUpdatedEventArgs bağımsız değişkenleri, RowUpdating ve RowUpdated olaylarına şu şekilde geçirilir: güncelleme işlemini gerçekleştirmek için kullanılan Command nesnesine referans veren bir Command özelliği; güncellenmiş bilgileri içeren Row nesnesine referans veren bir DataRow özelliği; gerçekleştirilen güncellemenin türüne yönelik bir StatementType özelliği; varsa TableMapping, ve işlemin Status özelliği.
özelliğini kullanarak Status işlem sırasında bir hata oluşup oluşmadığını belirleyebilir ve isterseniz eylemleri geçerli ve sonuçta elde edilen satırlara karşı denetleyebilirsiniz. Olay gerçekleştiğinde Status özelliği ya Continue ya da ErrorsOccurred değerine eşit olur. Aşağıdaki tabloda, güncelleştirme sırasında sonraki eylemleri denetlemek için özelliğini ayarlayabileceğiniz Status değerler gösterilmektedir.
| Statü | Açıklama |
|---|---|
Continue |
Güncelleştirme işlemine devam edin. |
ErrorsOccurred |
Güncelleştirme işlemini durdurun ve bir istisna oluşturun. |
SkipCurrentRow |
Şu anki satırı yoksayın ve güncelleme işlemine devam edin. |
SkipAllRemainingRows |
Güncelleştirme işlemini durdurun, ancak özel durum oluşturmayın. |
Status özelliğini ErrorsOccurred olarak ayarlamak bir istisna oluşturmasına neden olur. İstisna olarak oluşturmak istediğiniz özel durumu "Errors" özelliğini ayarlayarak denetleyebilirsiniz.
Status için diğer değerlerden birinin kullanılması bir istisnanın oluşmasını önler.
Güncelleştirilmiş satırlara yönelik ContinueUpdateOnError hataları işlemek için özelliğini de kullanabilirsiniz. Eğer DataAdapter.ContinueUpdateOnErrortrue ise, bir satıra yapılan güncelleştirme bir özel durumun fırlatılmasına neden olduğunda, özel durumun metni belirli bir satırın RowError bilgilerine yerleştirilir ve işlem özel durum fırlatılmadan devam eder. Bu, hata ile karşılaşıldığında hatalara yanıt vermenizi sağlayan Update olayının aksine, RowUpdated tamamlandıktan sonra hatalara yanıt vermenizi sağlar.
Aşağıdaki kod örneği, olay işleyicilerinin nasıl ekleneceğini ve kaldırılacağını gösterir. Olay işleyicisi RowUpdating , silinen tüm kayıtların bir günlüğünü zaman damgasıyla yazar. Olay işleyicisi, RowUpdated içindeki satırın RowError özelliğine hata bilgileri ekler, istisnayı bastırır ve DataSetContinueUpdateOnError = davranışını yansıtma şeklinde işlemeye devam eder.
' Assumes that connection is a valid SqlConnection object.
Dim custAdapter As SqlDataAdapter = New SqlDataAdapter( _
"SELECT CustomerID, CompanyName FROM Customers", connection)
' Add handlers.
AddHandler custAdapter.RowUpdating, New SqlRowUpdatingEventHandler( _
AddressOf OnRowUpdating)
AddHandler custAdapter.RowUpdated, New SqlRowUpdatedEventHandler(
AddressOf OnRowUpdated)
' Set DataAdapter command properties, fill DataSet, and modify DataSet.
custAdapter.Update(custDS, "Customers")
' Remove handlers.
RemoveHandler custAdapter.RowUpdating, _
New SqlRowUpdatingEventHandler(AddressOf OnRowUpdating)
RemoveHandler custAdapter.RowUpdated, _
New SqlRowUpdatedEventHandler(AddressOf OnRowUpdated)
Private Shared Sub OnRowUpdating(sender As Object, _
args As SqlRowUpdatingEventArgs)
If args.StatementType = StatementType.Delete Then
Dim tw As System.IO.TextWriter = _
System.IO.File.AppendText("Deletes.log")
tw.WriteLine( _
"{0}: Customer {1} Deleted.", DateTime.Now, args.Row(_
"CustomerID", DataRowVersion.Original))
tw.Close()
End If
End Sub
Private Shared Sub OnRowUpdated( _
sender As Object, args As SqlRowUpdatedEventArgs)
If args.Status = UpdateStatus.ErrorsOccurred
args.Status = UpdateStatus.SkipCurrentRow
args.Row.RowError = args.Errors.Message
End If
End Sub
// Assumes that connection is a valid SqlConnection object.
SqlDataAdapter custAdapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName FROM Customers", connection);
// Add handlers.
custAdapter.RowUpdating += new SqlRowUpdatingEventHandler(OnRowUpdating);
custAdapter.RowUpdated += new SqlRowUpdatedEventHandler(OnRowUpdated);
// Set DataAdapter command properties, fill DataSet, modify DataSet.
custAdapter.Update(custDS, "Customers");
// Remove handlers.
custAdapter.RowUpdating -= new SqlRowUpdatingEventHandler(OnRowUpdating);
custAdapter.RowUpdated -= new SqlRowUpdatedEventHandler(OnRowUpdated);
protected static void OnRowUpdating(
object sender, SqlRowUpdatingEventArgs args)
{
if (args.StatementType == StatementType.Delete)
{
System.IO.TextWriter tw = System.IO.File.AppendText("Deletes.log");
tw.WriteLine(
"{0}: Customer {1} Deleted.", DateTime.Now,
args.Row["CustomerID", DataRowVersion.Original]);
tw.Close();
}
}
protected static void OnRowUpdated(
object sender, SqlRowUpdatedEventArgs args)
{
if (args.Status == UpdateStatus.ErrorsOccurred)
{
args.Row.RowError = args.Errors.Message;
args.Status = UpdateStatus.SkipCurrentRow;
}
}
DoldurmaHatası
DataAdapter işlem sırasında bir hata oluştuğunda FillError olayını yayınlar. Bu tür bir hata genellikle, satıra eklenen verilerin kesinlik kaybı olmadan bir .NET Framework türüne dönüştürülemediğinde oluşur.
İşlem sırasında bir hata oluşursa, geçerli satır Fill öğesine eklenmez. Olay, FillError hatayı düzeltmenize ve satırı eklemenize veya dışlanan satırı yoksayıp işleme devam Fill etmenizi sağlar.
FillErrorEventArgs iletilen FillError olayına, hatalara yanıt vermenize ve çözmenize olanak tanıyan çeşitli özellikler dahil edilebilir. Aşağıdaki tabloda nesnenin özellikleri gösterilmektedir FillErrorEventArgs .
| Mülkiyet | Açıklama |
|---|---|
Errors |
Meydana gelen Exception. |
DataTable |
Hata meydana geldiğinde doldurulmakta olan DataTable nesne. |
Values |
Hata oluştuğunda eklenen satırın değerlerini içeren bir nesne dizisi. Dizinin sıralı Values referansları, eklenen satırın sütunlarının sıralı referanslarına karşılık gelir. Örneğin, Values[0] satırın ilk sütunu olarak eklenen değerdir. |
Continue |
İstisna fırlatıp fırlatmama seçeneğini size sunar. özelliğinin Continue olarak false ayarlanması geçerli Fill işlemi durdurur ve bir özel durum oluşturulur.
Continue'ü true olarak ayarlamak, hatalara rağmen Fill işlemini devam ettirir. |
Aşağıdaki kod örneği, FillError etkinliği için DataAdapter bir olay işleyicisi ekler. Olay kodunda FillError örnek, özel duruma yanıt verme fırsatı sağlayarak duyarlık kaybı olasılığı olup olmadığını belirler.
AddHandler adapter.FillError, New FillErrorEventHandler( _
AddressOf FillError)
Dim dataSet As DataSet = New DataSet
adapter.Fill(dataSet, "ThisTable")
Private Shared Sub FillError(sender As Object, _
args As FillErrorEventArgs)
If args.Errors.GetType() Is Type.GetType("System.OverflowException") Then
' Code to handle precision loss.
' Add a row to table using the values from the first two columns.
DataRow myRow = args.DataTable.Rows.Add(New Object() _
{args.Values(0), args.Values(1), DBNull.Value})
' Set the RowError containing the value for the third column.
myRow.RowError = _
"OverflowException encountered. Value from data source: " & _
args.Values(2)
args.Continue = True
End If
End Sub
adapter.FillError += new FillErrorEventHandler(FillError);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "ThisTable");
protected static void FillError(object sender, FillErrorEventArgs args)
{
if (args.Errors.GetType() == typeof(System.OverflowException))
{
// Code to handle precision loss.
//Add a row to table using the values from the first two columns.
DataRow myRow = args.DataTable.Rows.Add(new object[]
{args.Values[0], args.Values[1], DBNull.Value});
//Set the RowError containing the value for the third column.
myRow.RowError =
"OverflowException Encountered. Value from data source: " +
args.Values[2];
args.Continue = true;
}
}