.NET Framework uygulamalarında verileri veritabanına geri kaydetme

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.

Veri kümesi, verilerin bellek içi bir kopyasıdır. Bu verileri değiştirirseniz, bu değişiklikleri veritabanına geri kaydetmek iyi bir uygulamadır. Bunu üç yoldan biriyle yaparsınız:

  • TableAdapter yöntemlerinden birini Update çağırarak

  • TableAdapter yöntemlerinden DBDirect birini çağırarak

  • Veri kümesi, veri kümesindeki UpdateAll diğer tablolarla ilişkili tablolar içerdiğinde Visual Studio'nın sizin için oluşturduğu TableAdapterManager'da yöntemini çağırarak

Veri kümesi tablolarını Windows Form veya XAML sayfasındaki denetimlere bağladığınızda, veri bağlama mimarisi tüm işleri sizin yernize yapar.

TableAdapters hakkında bilginiz varsa, doğrudan şu konulardan birine atlayabilirsiniz:

Konu Açıklama
Veritabanına yeni kayıtlar ekleme TableAdapters veya Command nesnelerini kullanarak güncelleştirmeleri ve eklemeleri gerçekleştirme
TableAdapter kullanarak verileri güncelleştirme TableAdapters ile güncelleştirmeleri gerçekleştirme
Hiyerarşik güncelleştirme İki veya daha fazla ilişkili tablo içeren bir veri kümesinden güncelleştirme gerçekleştirme
Bir eşzamanlılık özel durumunu işleme İki kullanıcı aynı anda veritabanında aynı verileri değiştirmeye çalıştığında özel durumları işleme
Nasıl yapılır: İşlem kullanarak verileri kaydetme Sistem kullanarak bir işlemdeki verileri kaydetme. transactions ad alanı ve TransactionScope nesnesi
Bir işlemde veri kaydetme İşlem içindeki bir veritabanına veri kaydetmeyi göstermek için bir Windows Forms uygulaması oluşturan izlenecek yol
Bir veritabanına (birden çok tablo) veri kaydetme Birden çok tablodaki kayıtları düzenleme ve değişiklikleri veritabanına geri kaydetme
Verileri bir nesneden veritabanına kaydetme TableAdapter DbDirect yöntemi kullanarak veri kümesinde olmayan bir nesneden veritabanına veri geçirme
TableAdapter DBDirect metotlarıyla veri kaydetme Sql sorgularını doğrudan veritabanına göndermek için TableAdapter'ı kullanma
Bir veri kümesini XML olarak kaydetme Veri kümesini XML belgesine kaydetme

İki aşamalı güncelleştirmeler

Veri kaynağını güncelleştirmek iki adımlı bir işlemdir. İlk adım veri kümesini yeni kayıtlarla, değiştirilen kayıtlarla veya silinen kayıtlarla güncelleştirmektir. Uygulamanız bu değişiklikleri hiçbir zaman veri kaynağına geri göndermediyse güncelleştirme işleminiz tamamlanmıştır.

Değişiklikleri veritabanına geri gönderirseniz, ikinci bir adım gerekir. Veriye bağlı denetimler kullanmıyorsanız, veri kümesini doldurmak için kullandığınız TableAdapter'ın (veya veri bağdaştırıcısının) yöntemini el ile çağırmanız Update gerekir. Ancak, verileri bir veri kaynağından diğerine taşımak veya birden çok veri kaynağını güncelleştirmek için farklı bağdaştırıcılar da kullanabilirsiniz. Veri bağlama kullanmıyorsanız ve ilgili tablolar için değişiklikleri kaydediyorsanız, otomatik olarak oluşturulan TableAdapterManager sınıfın değişkenini el ile oluşturup yöntemini çağırmanız UpdateAll gerekir.

Veri kümesi güncelleştirmelerinin kavramsal diyagramı

Veri kümesi, satır koleksiyonları içeren tablo koleksiyonları içerir. Temel alınan bir veri kaynağını daha sonra güncelleştirmek istiyorsanız, satır eklerken veya kaldırırken özelliğindeki DataTable.DataRowCollection yöntemleri kullanmanız gerekir. Bu yöntemler, veri kaynağını güncelleştirmek için gereken değişiklik izlemeyi gerçekleştirir. Rows özelliğinde RemoveAt koleksiyonu çağırırsanız silme işlemi veritabanına geri iletilmeyecektir.

Veri kümelerini birleştirme

Bir veri kümesini başka bir veri kümesiyle birleştirerek veri kümesinin içeriğini güncelleştirebilirsiniz. Bu, bir kaynak veri kümesinin içeriğini çağıran veri kümesine (hedef veri kümesi olarak adlandırılır) kopyalamayı içerir. Veri kümelerini birleştirdiğinizde, kaynak veri kümesindeki yeni kayıtlar hedef veri kümesine eklenir. Ayrıca, kaynak veri kümesindeki ek sütunlar hedef veri kümesine eklenir. Veri kümelerini birleştirmek, yerel bir veri kümeniz olduğunda ve başka bir uygulamadan ikinci bir veri kümesi aldığınızda yararlıdır. Xml web hizmeti gibi bir bileşenden ikinci bir veri kümesi aldığınızda veya birden çok veri kümesindeki verileri tümleştirmeniz gerektiğinde de yararlıdır.

Veri kümelerini birleştirirken, yöntemine hedef veri kümesindeki Merge mevcut değişiklikleri koruyup korumayacağını bildiren bir Boole bağımsız değişkeni (preserveChanges) geçirebilirsiniz. Veri kümeleri kayıtların birden çok sürümünü barındırdığından, kayıtların birden fazla sürümünün birleştirildiğini aklınızda bulundurmak önemlidir. Aşağıdaki tabloda, iki veri kümesindeki bir kaydın nasıl birleştirıldığı gösterilmektedir:

DataRowVersion Hedef veri kümesi Kaynak veri kümesi
Özgün James Wilson James C. Wilson
Geçerli Jim Wilson James C. Wilson

Merge Yöntemin önceki tabloda preserveChanges=false targetDataset.Merge(sourceDataset) çağrılması aşağıdaki verilere neden olur:

DataRowVersion Hedef veri kümesi Kaynak veri kümesi
Özgün James C. Wilson James C. Wilson
Geçerli James C. Wilson James C. Wilson

yöntemini çağırmak Merge aşağıdaki verilerle preserveChanges = true targetDataset.Merge(sourceDataset, true) sonuç döndürür:

DataRowVersion Hedef veri kümesi Kaynak veri kümesi
Özgün James C. Wilson James C. Wilson
Geçerli Jim Wilson James C. Wilson

Dikkat

preserveChanges = true Senaryoda, yöntem hedef veri kümesindeki bir kayıtta çağrılırsaRejectChanges, kaynak veri kümesindeki özgün verilere geri döner. Bu, özgün veri kaynağını hedef veri kümesiyle güncelleştirmeye çalışırsanız güncelleştirilecek özgün satırı bulamayabileceği anlamına gelir. Başka bir veri kümesini veri kaynağındaki güncelleştirilmiş kayıtlarla doldurup eşzamanlılık ihlalini önlemek için birleştirme gerçekleştirerek eşzamanlılık ihlalini önleyebilirsiniz. (Veri kümesi doldurulduktan sonra başka bir kullanıcı veri kaynağındaki bir kaydı değiştirdiğinde eşzamanlılık ihlali oluşur.)

Güncelleştirme kısıtlamaları

Mevcut bir veri satırında değişiklik yapmak için, tek tek sütunlarda veri ekleyin veya güncelleştirin. Veri kümesi kısıtlamalar (yabancı anahtarlar veya null atanamayan kısıtlamalar gibi) içeriyorsa, siz güncelleştirdikçe kaydın geçici olarak hata durumunda olması mümkündür. Başka bir ifadeyle, bir sütunu güncelleştirmeyi tamamladıktan sonra ancak bir sonraki sütuna geçmeden önce hata durumunda olabilir.

Erken kısıtlama ihlallerini önlemek için güncelleştirme kısıtlamalarını geçici olarak askıya alabilirsiniz. Bu iki amaca hizmet eder:

  • Bir sütunu güncelleştirmeyi tamamladıktan ancak başka bir sütunu güncelleştirmeye başlamadıktan sonra hatanın oluşmasını önler.

  • Bazı güncelleştirme olaylarının tetiklenmesini engeller (genellikle doğrulama için kullanılan olaylar).

Not

Windows Forms'da, datagrid'de yerleşik olarak bulunan veri bağlama mimarisi, odak bir satır dışına taşınana kadar kısıtlama denetimini askıya alır ve açıkça , EndEditveya CancelEdit yöntemlerini çağırmanız BeginEditgerekmez.

Yöntem bir veri kümesinde Merge çağrıldığında kısıtlamalar otomatik olarak devre dışı bırakılır. Birleştirme tamamlandığında, veri kümesinde etkinleştirilemeyen kısıtlamalar varsa, bir ConstraintException oluşturulur. Bu durumda özelliği EnforceConstraints olarak ayarlanır ve özelliği olarak false, sıfırlamadan EnforceConstraints trueönce tüm kısıtlama ihlallerinin çözülmesi gerekir.

Bir güncelleştirmeyi tamamladıktan sonra, güncelleştirme olaylarını yeniden etkinleştiren ve tetikleyen kısıtlama denetimini yeniden etkinleştirebilirsiniz.

Olayları askıya alma hakkında daha fazla bilgi için bkz . Veri kümesini doldururken kısıtlamaları kapatma.

Veri kümesi güncelleştirme hataları

Bir veri kümesindeki bir kaydı güncelleştirdiğinizde hata olasılığı vardır. Örneğin, yanlışlıkla yanlış türde verileri bir sütuna veya çok uzun olan verileri ya da başka bir bütünlük sorunu olan verileri yazabilirsiniz. Öte yandan, bir güncelleştirme olayının herhangi bir aşamasında özel hatalar oluşturabilen uygulamaya özgü doğrulama denetimleriniz de olabilir. Daha fazla bilgi için bkz . Veri kümelerindeki verileri doğrulama.

Değişikliklerle ilgili bilgileri koruma

Veri kümesindeki değişikliklerle ilgili bilgiler iki şekilde tutulur: değiştirildiğini belirten satırları işaretleyerek (RowState ) ve bir kaydın birden çok kopyasını (DataRowVersion tutarak). İşlemler bu bilgileri kullanarak veri kümesinde nelerin değiştiğini belirleyebilir ve veri kaynağına uygun güncelleştirmeler gönderebilir.

RowState özelliği

RowState Bir DataRow nesnenin özelliği, belirli bir veri satırının durumu hakkında bilgi sağlayan bir değerdir.

Aşağıdaki tabloda, numaralandırmanın olası değerleri ayrıntılı olarak yer alır DataRowState :

DataRowState Değeri Açıklama
Added Satır, öğesine öğe DataRowCollectionolarak eklenmiştir. (Bu durumdaki bir satır, son AcceptChanges yöntem çağrıldığında mevcut olmadığından karşılık gelen özgün sürümüne sahip değildir).
Deleted Satır bir DataRow nesne kullanılarak Delete silindi.
Detached Satır oluşturuldu, ancak herhangi bir DataRowCollectionöğesinin parçası değil. Bir DataRow nesne oluşturulduktan hemen sonra, bir koleksiyona eklenmeden hemen önce ve bir koleksiyondan kaldırıldıktan hemen sonra bu durumdadır.
Modified Satırdaki bir sütun değeri bir şekilde değişti.
Unchanged Satır en son çağrıldığından beri AcceptChanges değişmedi.

DataRowVersion numaralandırması

Veri kümeleri, kayıtların birden çok sürümünü tutar. alanlar, DataRowVersion özelliği veya GetChildRows nesnesinin yöntemi DataRow kullanılarak Item[] içinde DataRow bulunan değer alınırken kullanılır.

Aşağıdaki tabloda, numaralandırmanın olası değerleri ayrıntılı olarak yer alır DataRowVersion :

DataRowVersion Değeri Açıklama
Current Kaydın geçerli sürümü, kayıtta son çağrılma AcceptChanges tarihinden bu yana gerçekleştirilen tüm değişiklikleri içerir. Satır silinmişse geçerli sürüm yoktur.
Default Veri kümesi şeması veya veri kaynağı tarafından tanımlanan kaydın varsayılan değeri.
Original Kaydın özgün sürümü, veri kümesinde yapılan değişikliklerin son işlenme zamanı olduğu gibi kaydın bir kopyasıdır. Pratik olarak, bu genellikle bir kaydın veri kaynağından okunan sürümüdür.
Proposed Bir güncelleştirmenin ortasındayken geçici olarak kullanılabilen bir kaydın önerilen sürümü; yani yöntemini ve EndEdit yöntemini çağırdığınız BeginEdit zaman arasında. Genellikle gibi RowChangingbir olay için işleyicideki bir kaydın önerilen sürümüne erişebilirsiniz. yöntemi çağrılırsa CancelEdit değişiklikler tersine çevrilir ve veri satırının önerilen sürümü silinir.

Güncelleştirme bilgileri bir veri kaynağına iletildiğinde özgün ve geçerli sürümler yararlıdır. Genellikle, veri kaynağına bir güncelleştirme gönderildiğinde, veritabanı için yeni bilgiler kaydın geçerli sürümündedir. Özgün sürümdeki bilgiler, güncelleştirilecek kaydı bulmak için kullanılır.

Örneğin, bir kaydın birincil anahtarının değiştirildiği bir durumda, değişiklikleri güncelleştirmek için veri kaynağında doğru kaydı bulmanın bir yolunu bulmanız gerekir. Özgün sürüm yoksa, kayıt büyük olasılıkla veri kaynağına eklenir ve bu da yalnızca fazladan istenmeyen bir kayıtla değil, aynı zamanda yanlış ve güncel olmayan bir kayıtla sonuçlanır. İki sürüm eşzamanlılık denetiminde de kullanılır. Kaydın veri kümesine yüklendikten sonra değişip değişmediğini belirlemek için özgün sürümü veri kaynağındaki bir kayıtla karşılaştırabilirsiniz.

Önerilen sürüm, değişiklikleri veri kümesine işlemeden önce doğrulama gerçekleştirmeniz gerektiğinde kullanışlıdır.

Kayıtlar değişmiş olsa bile, bu satırın her zaman özgün veya geçerli sürümleri yoktur. Tabloya yeni bir satır eklediğinizde, özgün sürüm yoktur, yalnızca geçerli bir sürüm vardır. Benzer şekilde, tablonun Delete yöntemini çağırarak bir satırı silerseniz, özgün bir sürüm vardır, ancak geçerli sürüm yoktur.

Bir veri satırının HasVersion yöntemini sorgulayarak kaydın belirli bir sürümünün mevcut olup olmadığını test edebilirsiniz. Bir sütunun değerini istediğinizde bir sabit listesi değerini isteğe bağlı bağımsız değişken olarak geçirerek DataRowVersion kaydın herhangi bir sürümüne erişebilirsiniz.

Değiştirilen kayıtları alma

Bir veri kümesindeki her kaydı güncelleştirmemek yaygın bir uygulamadır. Örneğin, bir kullanıcı birçok kayıt görüntüleyen bir Windows Forms DataGridView denetimiyle çalışıyor olabilir. Ancak kullanıcı yalnızca birkaç kaydı güncelleştirebilir, silebilir ve yeni bir kayıt ekleyebilir. Veri kümeleri ve veri tabloları yalnızca değiştirilmiş satırları döndürmek için bir yöntem (GetChanges) sağlar.

Veri tablosunun () veya veri kümesininGetChanges (GetChanges) yöntemini kullanarak GetChanges değiştirilen kayıtların alt kümelerini oluşturabilirsiniz. Veri tablosu için yöntemini çağırırsanız, tablonun yalnızca değiştirilen kayıtları içeren bir kopyasını döndürür. Benzer şekilde, veri kümesinde yöntemini çağırırsanız, içinde yalnızca değiştirilmiş kayıtları olan yeni bir veri kümesi alırsınız.

GetChanges tek başına tüm değiştirilen kayıtları döndürür. Buna karşılık, isteneni DataRowState yöntemine GetChanges parametre olarak geçirerek, değiştirilen kayıtların hangi alt kümesini istediğinizi belirtebilirsiniz: yeni eklenen kayıtlar, silinmek üzere işaretlenmiş kayıtlar, ayrılmış kayıtlar veya değiştirilmiş kayıtlar.

İşlenmek üzere başka bir bileşene kayıt göndermek istediğinizde, değiştirilen kayıtların bir alt kümesini almak yararlı olabilir. Veri kümesinin tamamını göndermek yerine, yalnızca bileşenin ihtiyaç duyduğu kayıtları alarak diğer bileşenle iletişim kurma yükünü azaltabilirsiniz.

Veri kümesinde değişiklikleri işleme

Veri kümesinde değişiklikler yapıldıkçe, RowState değiştirilen satırların özelliği ayarlanır. Kayıtların özgün ve geçerli sürümleri oluşturulur, korunur ve özelliği tarafından RowVersion kullanımınıza sunulur. Bu değiştirilen satırların özelliklerinde depolanan meta veriler, veri kaynağına doğru güncelleştirmeleri göndermek için gereklidir.

Değişiklikler veri kaynağının geçerli durumunu yansıtacaksa, artık bu bilgileri korumanız gerekmez. Genellikle, veri kümesi ve kaynağı eşitlendiğinde iki kez vardır:

  • Veri kümesine bilgi yükledikten hemen sonra (örneğin, kaynaktan veri okurken).

  • Değişiklikleri veri kümesinden veri kaynağına gönderdikten sonra (ancak daha önce değil), değişiklikleri veritabanına göndermek için gereken değişiklik bilgilerini kaybedersiniz.

yöntemini çağırarak bekleyen değişiklikleri veri kümesinde AcceptChanges işleyebilirsiniz. Genellikle, AcceptChanges aşağıdaki zamanlarda çağrılır:

  • Veri kümesini yükledikten sonra. TableAdapter'ın Fill yöntemini çağırarak bir veri kümesi yüklerseniz bağdaştırıcı değişiklikleri sizin için otomatik olarak işler. Ancak, bir veri kümesini başka bir veri kümesini birleştirerek yüklerseniz, değişiklikleri el ile işlemeniz gerekir.

    Not

    bağdaştırıcının özelliğini olarak ayarlayarak AcceptChangesDuringFill yöntemini çağırdığınızda Fill bağdaştırıcının falsedeğişiklikleri otomatik olarak işlemesini engelleyebilirsiniz. olarak ayarlanırsafalseRowState, dolgu sırasında eklenen her satırın değeri olarak Addedayarlanır.

  • Veri kümesi değişikliklerini XML web hizmeti gibi başka bir işleme gönderdikten sonra.

    Dikkat

    Değişikliğin bu şekilde işlenmesi değişiklik bilgilerini siler. Uygulamanızın veri kümesinde hangi değişikliklerin yapıldığını bilmesini gerektiren işlemleri tamamlayana kadar değişiklikleri işlemeyin.

Bu yöntem aşağıdakileri gerçekleştirir:

  • Bir kaydın Current sürümünü kendi sürümüne Original yazar ve özgün sürümün üzerine yazar.

  • özelliğinin RowState olarak ayarlandığı Deletedtüm satırları kaldırır.

  • Kaydın RowState özelliğini olarak Unchangedayarlar.

AcceptChanges yöntemi üç düzeyde kullanılabilir. Yalnızca bu satıra yönelik değişiklikleri işlemek için bunu bir DataRow nesnede çağırabilirsiniz. Tablodaki tüm satırları işlemek için nesne üzerinde DataTable de çağırabilirsiniz. Son olarak, veri kümesinin tüm tablolarının DataSet tüm kayıtlarında bekleyen tüm değişiklikleri işlemek için nesnesinde çağırabilirsiniz.

Aşağıdaki tabloda, yöntemin hangi nesnede çağrıldığı temel alınarak hangi değişikliklerin işlendiği açıklanmaktadır:

Metot Sonuç
System.Data.DataRow.AcceptChanges Değişiklikler yalnızca belirli bir satırda işlenir.
System.Data.DataTable.AcceptChanges Değişiklikler, belirli bir tablodaki tüm satırlarda işlenir.
System.Data.DataSet.AcceptChanges Değişiklikler, veri kümesinin tüm tablolarındaki tüm satırlarda işlenir.

Not

TableAdapter'ın Fill yöntemini çağırarak bir veri kümesi yüklerseniz, değişiklikleri açıkça kabul etmek zorunda değilsiniz. Varsayılan olarak, Fill yöntem veri tablosunu doldurmayı tamamladıktan sonra yöntemini çağırır AcceptChanges .

İlgili bir yöntem olan , RejectChangessürümü kayıtların sürümüne geri Current kopyalayarak Original değişikliklerin etkisini geri alır. Ayrıca her kaydın öğesini RowState olarak ayarlar Unchanged.

Veri doğrulaması

Uygulamanızdaki verilerin geçirilecek işlemlerin gereksinimlerini karşıladığını doğrulamak için genellikle doğrulama eklemeniz gerekir. Bu, bir kullanıcının formdaki girişinin doğru olup olmadığını denetlemeyi, başka bir uygulama tarafından uygulamanıza gönderilen verileri doğrulamayı, hatta bileşeninizde hesaplanan bilgilerin veri kaynağınızın ve uygulama gereksinimlerinizin kısıtlamalarına uygun olup olmadığını denetlemeyi içerebilir.

Verileri çeşitli yollarla doğrulayabilirsiniz:

  • İş katmanında, verileri doğrulamak için uygulamanıza kod ekleyerek. Veri kümesi bunu yapabileceğiniz tek yerdir. Veri kümesi, arka uç doğrulamasının bazı avantajlarını sağlar; örneğin, sütun ve satır değerleri değiştikçe değişiklikleri doğrulama olanağı. Daha fazla bilgi için bkz . Veri kümelerindeki verileri doğrulama.

  • Formlara doğrulama ekleyerek sunu katmanında. Daha fazla bilgi için bkz . Windows Forms'da kullanıcı girişi doğrulaması.

  • Veri arka ucunda, veri kaynağına (örneğin, veritabanı) veri göndererek ve verilerin kabul veya reddetmesine izin vererek. Verileri doğrulamaya ve hata bilgileri sağlamaya yönelik gelişmiş olanaklara sahip bir veritabanıyla çalışıyorsanız, verileri nereden gelirse gelsin doğrulayabileceğiniz için bu pratik bir yaklaşım olabilir. Ancak, bu yaklaşım uygulamaya özgü doğrulama gereksinimlerini karşılamayabilir. Ayrıca, veri kaynağının verileri doğrulamasını sağlamak, uygulamanızın arka uç tarafından tetiklenen doğrulama hatalarının çözümünü nasıl kolaylaştırdığına bağlı olarak veri kaynağına çok sayıda gidiş dönüşle sonuçlanabilir.

    Önemli

    olarak ayarlanmış Textbir CommandType özelliğe sahip veri komutlarını kullanırken, istemciden gönderilen bilgileri veritabanınıza geçirmeden önce dikkatle denetleyin. Kötü amaçlı kullanıcılar, yetkisiz erişim elde etmek veya veritabanına zarar vermek için değiştirilmiş veya ek SQL deyimleri göndermeye (ekleme) çalışabilir. Kullanıcı girişini veritabanına aktarmadan önce her zaman bilgilerin geçerli olduğunu doğrulayın. Mümkün olduğunda her zaman parametreli sorguları veya saklı yordamları kullanmak en iyi yöntemdir.

Güncelleştirmeleri veri kaynağına aktarma

Veri kümesinde değişiklikler yapıldıktan sonra, değişiklikleri bir veri kaynağına iletebilirsiniz. Bunu genellikle TableAdapter (veya veri bağdaştırıcısı) yöntemini çağırarak Update yaparsınız. Yöntem, bir veri tablosundaki her kayıtta döngü oluşturur, varsa ne tür bir güncelleştirme (güncelleştirme, ekleme veya silme) gerektiğini belirler ve ardından uygun komutu çalıştırır.

Güncelleştirmelerin nasıl yapıldığını gösteren bir çizim olarak, uygulamanızın tek bir veri tablosu içeren bir veri kümesi kullandığını varsayalım. Uygulama veritabanından iki satır getirir. Alma işleminin ardından bellek içi veri tablosu şöyle görünür:

(RowState)     CustomerID   Name             Status
(Unchanged)    c200         Robert Lyon      Good
(Unchanged)    c400         Nancy Buchanan    Pending

Uygulamanız Nancy Buchanan'ın durumunu "Tercih Edilen" olarak değiştirir. Bu değişikliğin sonucu olarak, bu satır için özelliğinin RowState değeri olarak Unchanged Modifieddeğişir. İlk satırın RowState özelliğinin değeri kalır Unchanged. Veri tablosu şimdi şöyle görünür:

(RowState)     CustomerID   Name             Status
(Unchanged)    c200         Robert Lyon      Good
(Modified)     c400         Nancy Buchanan    Preferred

Uygulamanız şimdi veri kümesini veritabanına iletmek için yöntemini çağırır Update . yöntemi her satırı sırayla inceler. İlk satır için yöntemi veritabanına SQL deyimi iletmez çünkü bu satır başlangıçta veritabanından getirildiğinden değişmemiştir.

Ancak Update ikinci satır için yöntemi otomatik olarak doğru veri komutunu çağırır ve veritabanına iletir. SQL deyiminin söz dizimi, temel alınan veri deposu tarafından desteklenen SQL diyalektini temel alır. Ancak, iletilen SQL deyiminin aşağıdaki genel özellikleri dikkat çekicidir:

  • İletilen SQL deyimi bir UPDATE deyimdir. özelliğinin değeri RowState olduğundan Modifiedbağdaştırıcı deyimini UPDATE kullanmayı bilir.

  • İletilen SQL deyimi, deyiminin hedefinin UPDATE bulunduğu CustomerID = 'c400'satır olduğunu belirten bir WHERE yan tümcesi içerir. deyiminin SELECT bu bölümü hedef satırı diğerlerinden ayırır çünkü CustomerID hedef tablonun birincil anahtarıdır. Yan tümcesinin WHERE bilgileri, satırı tanımlamak için gereken değerlerin değişmesi durumunda kaydın özgün sürümünden ()DataRowVersion.Original türetilir.

  • İletilen SQL deyimi, değiştirilen sütunların SET yeni değerlerini ayarlamak için yan tümcesini içerir.

    Not

    TableAdapter'ın UpdateCommand özelliği bir saklı yordamın adına ayarlanmışsa, bağdaştırıcı bir SQL deyimi oluşturmaz. Bunun yerine, saklı yordamı geçirilen uygun parametrelerle çağırır.

Parametre geçirme

Genellikle veritabanında güncelleştirilecek kayıtların değerlerini geçirmek için parametreleri kullanırsınız. TableAdapter'ın Update yöntemi bir UPDATE deyimi çalıştırdığında parametre değerlerini doldurması gerekir. Uygun veri komutu için koleksiyondan Parameters bu değerleri alır; bu örnekte UpdateCommand TableAdapter'daki nesne.

Veri bağdaştırıcısı oluşturmak için Visual Studio araçlarını kullandıysanız, nesnesi deyimindeki UpdateCommand her parametre yer tutucusunun karşılık gelen bir parametre koleksiyonunu içerir.

System.Data.SqlClient.SqlParameter.SourceColumn Her parametrenin özelliği, veri tablosundaki bir sütunu işaret eder. Örneğin, ve Original_au_id parametrelerinin SourceColumn au_id özelliği, veri tablosunda yazar kimliğini içeren sütuna ayarlanır. Bağdaştırıcının Update yöntemi çalıştırıldığında, güncelleştirilmekte olan kayıttan yazar kimliği sütununu okur ve değerleri deyimine doldurur.

Deyiminde UPDATE , hem yeni değerleri (kayda yazılacak değerler) hem de eski değerleri (kaydın veritabanında bulunabilmesi için) belirtmeniz gerekir. Bu nedenle, her değer için iki parametre vardır: yan tümcesi için SET bir parametre ve yan tümcesi WHERE için farklı bir parametre. Her iki parametre de güncelleştirilmekte olan kayıttan verileri okur, ancak parametrenin SourceVersion özelliğine göre sütun değerinin farklı sürümlerini alır. yan tümcesinin SET parametresi geçerli sürümü alır ve yan tümcesinin WHERE parametresi özgün sürümü alır.

Not

Koleksiyondaki Parameters değerleri kodda kendiniz de ayarlayabilirsiniz. Bunu genellikle veri bağdaştırıcısının RowChanging olayı için bir olay işleyicisinde yaparsınız.