.NET Framework uygulamalarında veri kümelerindeki verileri doğrulama
Not
Veri kümeleri ve ilgili sınıflar, uygulamaların veritabanıyla bağlantısı kesilirken uygulamaların bellekteki verilerle çalışmasını sağlayan 2000'lerin başlarındaki eski .NET Framework teknolojileridir. Teknolojiler özellikle kullanıcıların verileri değiştirmesine ve değişiklikleri veritabanında kalıcı hale getirebilmesine olanak tanıyan uygulamalar için kullanışlıdır. Veri kümelerinin çok başarılı bir teknoloji olduğu kanıtlanmış olsa da, yeni .NET uygulamalarının Entity Framework Core kullanmasını öneririz. Entity Framework, tablosal verilerle nesne modelleri olarak çalışmak için daha doğal bir yol sağlar ve daha basit bir programlama arabirimine sahiptir.
Verilerin doğrulanması, veri nesnelerine girilen değerlerin bir veri kümesinin şemasındaki kısıtlamalara uygun olduğunu onaylama işlemidir. Doğrulama işlemi, bu değerlerin uygulamanız için oluşturulan kurallara uyduğunu da onaylar. Temel alınan veritabanına güncelleştirme göndermeden önce verileri doğrulamak iyi bir uygulamadır. Bu, hataların yanı sıra bir uygulama ile veritabanı arasındaki olası gidiş dönüş sayısını azaltır.
Veri kümesinde doğrulama denetimleri oluşturarak veri kümesine yazılan verilerin geçerli olduğunu onaylayabilirsiniz. Veri kümesi, güncelleştirmenin nasıl gerçekleştirildiğine bakılmaksızın( doğrudan bir formdaki, bir bileşendeki veya başka bir şekilde denetimler tarafından) verileri denetleyebilir. Veri kümesi uygulamanızın bir parçası olduğundan (veritabanı arka uçlarından farklı olarak), uygulamaya özgü doğrulama oluşturmak için mantıksal bir yerdir.
Uygulamanıza doğrulama eklemek için en iyi yer veri kümesinin kısmi sınıf dosyasındadır. Visual Basic veya Visual C# içinde Veri Kümesi Tasarımcısı'nı açın ve doğrulama oluşturmak istediğiniz sütuna veya tabloya çift tıklayın. Bu eylem, bir veya RowChanging olay işleyicisi oluşturabileceğiniz ColumnChanging kod dosyasını açar.
Verileri doğrulama
Bir veri kümesindeki doğrulama aşağıdaki yollarla gerçekleştirilir:
Değişiklikler sırasında tek bir veri sütunundaki değerleri denetleyebilen, uygulamaya özgü kendi doğrulamanızı oluşturarak. Daha fazla bilgi için bkz . Nasıl yapılır: Sütun değişiklikleri sırasında verileri doğrulama.
Bir veri satırının tamamı değişirken verileri değerlere denetleyebilen, uygulamaya özgü kendi doğrulamanızı oluşturarak. Daha fazla bilgi için bkz . Nasıl yapılır: Satır değişiklikleri sırasında verileri doğrulama.
Veri kümesinin gerçek şema tanımının bir parçası olarak anahtarlar, benzersiz kısıtlamalar vb. oluşturarak.
Nesnenin DataColumn özelliklerini ayarlayarak, örneğin MaxLength, , AllowDBNullve Unique.
Kayıtta DataTable bir değişiklik gerçekleştiğinde nesne tarafından birkaç olay tetiklenir:
- ColumnChanging ve ColumnChanged olayları tek bir sütunda yapılan her değişiklik sırasında ve sonrasında oluşturulur. Olay ColumnChanging , belirli sütunlardaki değişiklikleri doğrulamak istediğinizde kullanışlıdır. Önerilen değişiklik hakkındaki bilgiler, olayla bağımsız değişken olarak geçirilir.
- RowChanging ve RowChanged olayları, bir satırdaki herhangi bir değişiklik sırasında ve sonrasında tetiklenir. Olay RowChanging daha geneldir. Bu, satırın herhangi bir yerinde bir değişiklik olduğunu gösterir, ancak hangi sütunun değiştiğini bilmezsiniz.
Varsayılan olarak, bir sütunda yapılan her değişiklik dört olay oluşturur. Birincisi, ColumnChanging değiştirilen belirli bir sütunun ve ColumnChanged olaylarıdır. Sırada ve RowChanged olayları yer alırRowChanging. Satırda birden çok değişiklik yapılıyorsa, her değişiklik için olaylar tetiklenir.
Not
Veri satırının BeginEdit yöntemi, her bir sütun değişikliğinden RowChanging sonra ve RowChanged olaylarını kapatır. Bu durumda, ve RowChanged olayları yalnızca bir kez tetiklendiğinde yöntemi çağrılana RowChanging kadar EndEdit olay tetiklenmez. Daha fazla bilgi için bkz . Veri kümesini doldururken kısıtlamaları kapatma.
Seçtiğiniz olay, doğrulamanın ne kadar ayrıntılı olmasını istediğinize bağlıdır. Bir sütun değiştiğinde hemen bir hata yakalamanız önemliyse, olayı kullanarak derleme doğrulaması yapın ColumnChanging . Aksi takdirde, aynı anda birkaç hata yakalamaya neden olabilecek olayı kullanın RowChanging . Ayrıca, verileriniz bir sütunun değerinin başka bir sütunun içeriğine göre doğrulanması için yapılandırılmışsa, doğrulamanızı olay sırasında gerçekleştirin RowChanging .
Kayıtlar güncelleştirildiğinde, DataTable nesne değişiklikler gerçekleşirken ve değişiklikler yapıldıktan sonra yanıt verebileceğiniz olayları tetikler.
Uygulamanız türü belirlenmiş bir veri kümesi kullanıyorsa, kesin olarak yazılan olay işleyicileri oluşturabilirsiniz. Bu, işleyicileri oluşturabileceğiniz dört ek türlenmiş olay ekler: dataTableNameRowChanging
, dataTableNameRowChanged
, dataTableNameRowDeleting
ve dataTableNameRowDeleted
. Bu türdeki olay işleyicileri, kodunuzun yazmasını ve okunmasını kolaylaştıran tablonuzun sütun adlarını içeren bir bağımsız değişken geçirir.
Veri güncelleştirme olayları
Olay | Açıklama |
---|---|
ColumnChanging | Sütundaki değer değiştiriliyor. Olay, önerilen yeni değerle birlikte satırı ve sütunu size geçirir. |
ColumnChanged | Sütundaki değer değiştirildi. Olay, önerilen değerle birlikte satırı ve sütunu size geçirir. |
RowChanging | Bir DataRow nesnede yapılan değişiklikler veri kümesine geri işlenmek üzeredir. yöntemini çağırmadıysanız BeginEdit , RowChanging olay oluşturulduktan hemen sonra ColumnChanging bir sütuna yapılan her değişiklik için olay oluşturulur. Değişiklik yapmadan önce çağırdıysanız BeginEdit , RowChanging olay yalnızca yöntemini çağırdığınızda EndEdit oluşturulur. Olay, satırı size ile birlikte hangi eylem türünün (değişiklik, ekleme vb.) gerçekleştirildiğini belirten bir değer ile birlikte geçirir. |
RowChanged | Satır değiştirildi. Olay, satırı size ile birlikte hangi eylem türünün (değişiklik, ekleme vb.) gerçekleştirildiğini belirten bir değer ile birlikte geçirir. |
RowDeleting | Bir satır siliniyor. Olay, satırı size ve gerçekleştirilmekte olan eylem türünü (silme) belirten bir değer ile birlikte geçirir. |
RowDeleted | Bir satır silindi. Olay, satırı size ve gerçekleştirilmekte olan eylem türünü (silme) belirten bir değer ile birlikte geçirir. |
ColumnChanging, RowChangingve RowDeleting olayları güncelleştirme işlemi sırasında oluşturulur. Verileri doğrulamak veya diğer işleme türlerini gerçekleştirmek için bu olayları kullanabilirsiniz. Bu olaylar sırasında güncelleştirme işlemi devam ettiğinden, güncelleştirmenin tamamlanmasını engelleyen bir özel durum oluşturarak bunu iptal edebilirsiniz.
ColumnChangedve RowChanged RowDeleted olayları, güncelleştirme başarıyla tamamlandığında tetiklenen bildirim olaylarıdır. Bu olaylar, başarılı bir güncelleştirmeye göre daha fazla işlem yapmak istediğinizde kullanışlıdır.
Sütun değişiklikleri sırasında verileri doğrulama
Not
Veri Kümesi Tasarımcısı, doğrulama mantığının bir veri kümesine eklenebileceği kısmi bir sınıf oluşturur. Tasarımcı tarafından oluşturulan veri kümesi kısmi sınıftaki hiçbir kodu silmez veya değiştirmez.
Bir veri sütunundaki değer değiştiğinde olayı yanıtlayarak ColumnChanging verileri doğrulayabilirsiniz. Bu olay tetiklendiğinde, geçerli sütun için önerilen değeri içeren bir olay bağımsız değişkeni (ProposedValue) geçirir. içeriğini e.ProposedValue
temel alarak şunları yapabilirsiniz:
Hiçbir şey yapmadan önerilen değeri kabul edin.
Sütun değiştirme olay işleyicisinin içinden sütun hatasını (SetColumnError) ayarlayarak önerilen değeri reddedin.
İsteğe bağlı olarak, ErrorProvider kullanıcıya bir hata iletisi görüntülemek için bir denetim kullanın. Daha fazla bilgi için bkz . ErrorProvider bileşeni.
Doğrulama, olay sırasında RowChanging da gerçekleştirilebilir.
Satır değişiklikleri sırasında verileri doğrulama
Doğrulamak istediğiniz her sütunun uygulamanızın gereksinimlerini karşılayan veriler içerdiğini doğrulamak için kod yazabilirsiniz. Önerilen bir değer kabul edilemezse, sütunu hata içerdiğini gösterecek şekilde ayarlayarak bunu yapın. Aşağıdaki örneklerde sütun 0 veya daha az olduğunda Quantity
bir sütun hatası ayarlanmıştır. Satır değiştiren olay işleyicileri aşağıdaki örneklere benzemelidir.
Satır değiştiğinde verileri doğrulamak için (Visual Basic)
Veri kümenizi Veri Kümesi Tasarımcısı'nda açın. Daha fazla bilgi için bkz . İzlenecek Yol: Veri Kümesi Tasarımcısı'nda Veri Kümesi Oluşturma.
Doğrulamak istediğiniz tablonun başlık çubuğuna çift tıklayın. Bu eylem, veri kümesinin RowChanging kısmi sınıf dosyasında öğesinin olay işleyicisini DataTable otomatik olarak oluşturur.
İpucu
Satır değiştirme olay işleyicisini oluşturmak için tablo adının soluna çift tıklayın. Tablo adına çift tıklarsanız, tabloyu düzenleyebilirsiniz.
Private Sub Order_DetailsDataTable_Order_DetailsRowChanging( ByVal sender As System.Object, ByVal e As Order_DetailsRowChangeEvent ) Handles Me.Order_DetailsRowChanging If CType(e.Row.Quantity, Short) <= 0 Then e.Row.SetColumnError("Quantity", "Quantity must be greater than 0") Else e.Row.SetColumnError("Quantity", "") End If End Sub
Satır değiştiğinde verileri doğrulamak için (C#)
Veri kümenizi Veri Kümesi Tasarımcısı'nda açın. Daha fazla bilgi için bkz . İzlenecek yol: Veri Kümesi Tasarımcısı'nda veri kümesi oluşturma.
Doğrulamak istediğiniz tablonun başlık çubuğuna çift tıklayın. Bu eylem için DataTablekısmi sınıf bir dosya oluşturur.
Not
Veri Kümesi Tasarımcısı, olay için otomatik olarak bir olay işleyicisi RowChanging oluşturmaz. Olayı işlemek RowChanging için bir yöntem oluşturmanız ve tablonun başlatma yönteminde olayı bağlamak için kod çalıştırmanız gerekir.
Aşağıdaki kodu kısmi sınıfa kopyalayın:
public override void EndInit() { base.EndInit(); Order_DetailsRowChanging += TestRowChangeEvent; } public void TestRowChangeEvent(object sender, Order_DetailsRowChangeEvent e) { if ((short)e.Row.Quantity <= 0) { e.Row.SetColumnError("Quantity", "Quantity must be greater than 0"); } else { e.Row.SetColumnError("Quantity", ""); } }
Değiştirilen satırları almak için
Veri tablosundaki her satır, numaralandırmadaki değerleri DataRowState kullanarak bu satırın geçerli durumunu izleyen bir RowState özelliğe sahiptir. veya yöntemini DataSet DataTableçağırarak bir veri kümesinden veya veri tablosundan GetChanges
değiştirilen satırları döndürebilirsiniz. Bir veri kümesinin yöntemini çağırarak HasChanges çağrısından GetChanges
önce değişikliklerin mevcut olduğunu doğrulayabilirsiniz.
Not
Veri kümesinde veya veri tablosundaki değişiklikleri işledikten sonra (yöntemini çağırarak AcceptChanges ), GetChanges
yöntem veri döndürmez. Uygulamanızın değiştirilen satırları işlemesi gerekiyorsa, yöntemini çağırmadan AcceptChanges
önce değişiklikleri işlemeniz gerekir.
Bir veri kümesinin GetChanges veya veri tablosunun yöntemini çağırmak, yalnızca değiştirilmiş kayıtları içeren yeni bir veri kümesi veya veri tablosu döndürür. Belirli kayıtları (örneğin, yalnızca yeni kayıtlar veya yalnızca değiştirilmiş kayıtlar) almak istiyorsanız, sabit listesindeki DataRowState bir değeri yönteme GetChanges
parametre olarak geçirebilirsiniz.
Bir satırın DataRowVersion farklı sürümlerine (örneğin, işlemeden önce bir satırda yer alan özgün değerler) erişmek için numaralandırmayı kullanın.
Bir veri kümesinden tüm değiştirilmiş kayıtları almak için
Veri kümesinin GetChanges yöntemini çağırın.
Aşağıdaki örnek adlı
changedRecords
yeni bir veri kümesi oluşturur ve bu veri kümesini adlıdataSet1
başka bir veri kümesinden değiştirilen tüm kayıtlarla doldurur.
Veri tablosundan değiştirilen tüm kayıtları almak için
GetChanges DataTable yöntemini çağırın.
Aşağıdaki örnek adlı
changedRecordsTable
yeni bir veri tablosu oluşturur ve adlı başka bir veri tablosundandataTable1
değiştirilen tüm kayıtlarla doldurur.
Belirli bir satır durumuna sahip tüm kayıtları almak için
Bir veri kümesinin
GetChanges
veya veri tablosunun yöntemini çağırın ve bir DataRowState sabit listesi değerini bağımsız değişken olarak geçirin.Aşağıdaki örnekte adlı
addedRecords
yeni bir veri kümesinin nasıl oluşturulacağı ve yalnızca veri kümesinedataSet1
eklenmiş olan kayıtlarla nasıl doldurulacağı gösterilmektedir.Aşağıdaki örnekte, tabloya son eklenen tüm kayıtların nasıl döndürüleceği gösterilmektedir
Customers
:
DataRow'un özgün sürümüne erişme
Veri satırlarında değişiklik yapıldığında, veri kümesi satırın hem özgün (Original) hem de yeni (Current) sürümlerini korur. Örneğin, yöntemini çağırmadan AcceptChanges
önce uygulamanız kaydın farklı sürümlerine erişebilir (numaralandırmada DataRowVersion tanımlandığı gibi) ve değişiklikleri buna göre işleyebilir.
Not
Satırın farklı sürümleri yalnızca düzenlendikten sonra ve yöntemi çağrıldıktan önce AcceptChanges
bulunur. AcceptChanges
Yöntem çağrıldıktan sonra geçerli ve özgün sürümler aynıdır.
DataRowVersion Değeri sütun dizini (veya sütun adı dize olarak) ile birlikte geçirmek, söz konusu sütunun belirli satır sürümündeki değeri döndürür. değiştirilen sütun ve ColumnChanged olayları sırasında ColumnChanging tanımlanır. Doğrulama amacıyla farklı satır sürümlerini incelemek için iyi bir zaman. Ancak kısıtlamaları geçici olarak askıya aldıysanız bu olaylar tetiklenmez ve hangi sütunların değiştiğini program aracılığıyla belirlemeniz gerekir. Bunu yapmak için koleksiyonda Columns yineleme yapabilir ve farklı DataRowVersion değerleri karşılaştırabilirsiniz.
Kaydın özgün sürümünü almak için
Döndürmek istediğiniz satırı geçirerek DataRowVersion sütunun değerine erişin.
Aşağıdaki örnekte, içindeki bir DataRowVersion alanın DataRowözgün değerini almak için bir
CompanyName
değerin nasıl kullanılacağı gösterilmektedir:
DataRow'un geçerli sürümüne erişme
Kaydın geçerli sürümünü almak için
Bir sütunun değerine erişin ve dizine bir satırın hangi sürümünü döndürmek istediğinizi belirten bir parametre ekleyin.
Aşağıdaki örnekte, içindeki bir DataRowVersion alanın DataRowgeçerli değerini almak için bir
CompanyName
değerin nasıl kullanılacağı gösterilmektedir: