.NET Framework uygulamalarında TableAdapters kullanarak veri kümelerini doldurma

Dekont

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. Bunlar ö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.

TableAdapter bileşeni, belirttiğiniz bir veya daha fazla sorguyu veya saklı yordamı temel alarak veri kümesini veritabanındaki verilerle doldurur. TableAdapters, veri kümesinde yaptığınız değişiklikleri kalıcı hale getirmek için veritabanında ekleme, güncelleştirme ve silme işlemleri de gerçekleştirebilir. Ayrıca, belirli bir tabloyla ilgisi olmayan genel komutlar da vekleyebilirsiniz.

Dekont

TableAdapters, Visual Studio tasarımcıları tarafından oluşturulur. Veri kümelerini program aracılığıyla oluşturuyorsanız, .NET sınıfı olan DataAdapter'ı kullanın.

TableAdapter işlemleri hakkında ayrıntılı bilgi için şu konulardan birine doğrudan atlayabilirsiniz:

Konu Açıklama
TableAdapter’lar oluşturma ve yapılandırma TableAdapters oluşturmak ve yapılandırmak için tasarımcıları kullanma
Parametreleştirilmiş TableAdapter sorguları oluşturma Kullanıcıların TableAdapter yordamlarına veya sorgularına bağımsız değişkenler sağlamasını sağlama
Bir TableAdapter ile veritabanına doğrudan erişme TableAdapters'ın Dbdirect yöntemlerini kullanma
Bir veri kümesini doldururken kısıtlamaları kapatma Verileri güncelleştirirken yabancı anahtar kısıtlamalarıyla çalışma
TableAdapter'ın işlevselliğini genişletme TableAdapters'a özel kod ekleme
Bir veri kümesinin içine XML verileri okuma XML ile çalışma

TableAdapter'a genel bakış

TableAdapters bir veritabanına bağlanan, sorguları veya saklı yordamları çalıştıran ve DataTable'larını döndürülen verilerle dolduran tasarımcı tarafından oluşturulan bileşenlerdir. TableAdapters ayrıca güncelleştirilmiş verileri uygulamanızdan veritabanına geri gönderir. TableAdapter'ın ilişkilendirildiği tablonun şemasına uygun veriler döndüren bir TableAdapter'da istediğiniz kadar sorgu çalıştırabilirsiniz. Aşağıdaki diyagramda TableAdapters'ın bellekteki veritabanları ve diğer nesnelerle nasıl etkileşimde olduğu gösterilmektedir:

Data flow in a client application

TableAdapter'lar Veri Kümesi Tasarım Aracı ile tasarlanırken, TableAdapter sınıfları iç içe sınıfları DataSetolarak oluşturulmaz. Her veri kümesine özgü ayrı ad alanlarında bulunurlar. Örneğin, adlı NorthwindDataSetbir veri kümeniz varsa içinde s NorthwindDataSet ile DataTableilişkilendirilmiş TableAdapters ad alanında NorthwindDataSetTableAdapters olur. Belirli bir TableAdapter bağdaştırıcısına program aracılığıyla erişmek için TableAdapter'ın yeni bir örneğini bildirmeniz gerekir. Örneğin:

NorthwindDataSet northwindDataSet = new NorthwindDataSet();

NorthwindDataSetTableAdapters.CustomersTableAdapter customersTableAdapter = 
    new NorthwindDataSetTableAdapters.CustomersTableAdapter();

customersTableAdapter.Fill(northwindDataSet.Customers);

İlişkili DataTable şeması

TableAdapter oluşturduğunuzda, TableAdapter'ın ilişkili DataTableşemasını tanımlamak için ilk sorguyu veya saklı yordamı kullanırsınız. Bu ilk sorguyu veya saklı yordamı, TableAdapter'ın Fill yöntemini çağırarak çalıştırırsınız (TableAdapter'ın ilişkili DataTableyöntemini doldurur). TableAdapter'ın ana sorgusunda yapılan tüm değişiklikler ilişkili veri tablosunun şemasına yansıtılır. Örneğin, bir sütunun ana sorgudan kaldırılması, sütunu ilişkili veri tablosundan da kaldırır. TableAdapter'daki ek sorgular ana sorguda olmayan sütunlar döndüren SQL deyimlerini kullanırsa tasarımcı, ana sorgu ile ek sorgular arasındaki sütun değişikliklerini eşitlemeyi dener.

TableAdapter güncelleştirme komutları

TableAdapter'ın güncelleştirme işlevi, TableAdapter Sihirbazı'ndaki ana sorguda ne kadar bilginin kullanılabilir olduğuna bağlıdır. Örneğin, birden çok tablodan (kullanarak JOIN), skaler değerlerden, görünümlerden veya toplama işlevlerinin sonuçlarından değerleri getirmek için yapılandırılmış TableAdapers başlangıçta güncelleştirmeleri temel alınan veritabanına geri gönderebilme özelliğiyle oluşturulmaz. Ancak, , UPDATEve DELETE komutlarını Özellikler penceresinde el ile yapılandırabilirsinizINSERT.

TableAdapter sorguları

TableAdapter with multiple queries

TableAdapters, ilişkili veri tablolarını doldurmak için birden çok sorgu içerebilir. Bir TableAdapter için, her sorgu ilişkili olduğu veri tablosunun şemasına uyan veriler döndürdüğü sürece, uygulamanızın gerektirdiği sayıda sorgu tanımlayabilirsiniz. Bu özellik, TableAdapter'ın farklı ölçütlere göre farklı sonuçlar yüklemesini sağlar.

Örneğin, uygulamanız müşteri adlarını içeren bir tablo içeriyorsa, tabloyu belirli bir harfle başlayan her müşteri adıyla ve tabloyu aynı durumda bulunan tüm müşterilerle dolduran başka bir adla dolduran bir sorgu oluşturabilirsiniz. Tabloyu belirli bir Customers durumdaki müşterilerle doldurmak için, durum değeri için aşağıdaki parametreyi alan bir FillByState sorgu oluşturabilirsiniz: SELECT * FROM Customers WHERE State = @State. yöntemini çağırarak FillByState ve parametre değerini şu şekilde geçirerek sorguyu çalıştırırsınız: CustomerTableAdapter.FillByState("WA").

TableAdapter'ın veri tablosuyla aynı şemanın verilerini döndüren sorgular eklemenin yanı sıra, skaler (tek) değerler döndüren sorgular da ekleyebilirsiniz. Örneğin, döndürülen veriler tablonun şemasına uymasa bile müşteri sayısını (SELECT Count(*) From Customers) döndüren bir CustomersTableAdapter, sorgu geçerli olur.

ClearBeforeFill özelliği

Varsayılan olarak, TableAdapter'ın veri tablosunu doldurmak için her sorgu çalıştırdığınızda, mevcut veriler temizlenir ve tabloya yalnızca sorgunun sonuçları yüklenir. Sorgudan döndürülen verileri bir veri tablosundaki mevcut verilere eklemek veya birleştirmek istiyorsanız TableAdapter ClearBeforeFill özelliğini false olarak ayarlayın. Verileri temizleyip temizlemediğinize bakılmaksızın, kalıcı hale getirmek istiyorsanız güncelleştirmeleri açıkça veritabanına geri göndermeniz gerekir. Bu nedenle, tabloyu dolduran başka bir sorgu çalıştırmadan önce tablodaki verilerde yapılan değişiklikleri kaydetmeyi unutmayın. Daha fazla bilgi için bkz . TableAdapter kullanarak verileri güncelleştirme.

TableAdapter devralma

TableAdapters, yapılandırılmış DataAdapter bir sınıfı kapsülleyerek standart veri bağdaştırıcılarının işlevselliğini genişletir. Varsayılan olarak TableAdapter sınıfından Component devralır ve sınıfına DataAdapter atılamaz. TableAdapter'ı sınıfa atama DataAdapter bir InvalidCastException hatayla sonuçlanır. TableAdapter'ın temel sınıfını değiştirmek için, Veri Kümesi Tasarım Aracı TableAdapter'ın Temel Sınıf özelliğinde öğesinden Componenttüretilen bir sınıf belirtebilirsiniz.

TableAdapter yöntemleri ve özellikleri

TableAdapter sınıfı bir .NET türü değildir. Bu, belgelerde veya Object Browser'da arama yapabileceğiniz anlamına gelir. Daha önce bahsedilen sihirbazlardan birini kullandığınızda tasarım zamanında oluşturulur. Oluşturduğunuz sırada TableAdapter'a atanan ad, üzerinde çalıştığınız tablonun adına bağlıdır. Örneğin, adlı Ordersveritabanındaki bir tabloyu temel alan bir TableAdapter oluşturduğunuzda, TableAdapter olarak adlandırılır OrdersTableAdapter. TableAdapter'ın sınıf adı, Veri Kümesi Tasarım Aracı Name özelliği kullanılarak değiştirilebilir.

TableAdapters'ın yaygın olarak kullanılan yöntemleri ve özellikleri şunlardır:

Üye Açıklama
TableAdapter.Fill TableAdapter'ın ilişkili veri tablosunu TableAdapter SELECT komutunun sonuçlarıyla doldurur.
TableAdapter.Update Değişiklikleri veritabanına geri gönderir ve güncelleştirmeden etkilenen satır sayısını temsil eden bir tamsayı döndürür. Daha fazla bilgi için bkz . TableAdapter kullanarak verileri güncelleştirme.
TableAdapter.GetData Verilerle dolu yeni DataTable bir değer döndürür.
TableAdapter.Insert Veri tablosunda yeni bir satır oluşturur. Daha fazla bilgi için bkz . Veritabanına yeni kayıtlar ekleme.
TableAdapter.ClearBeforeFill Fill yöntemlerinden birini çağırmadan önce veri tablosunun boşaltılıp boşaltılmadığını belirler.

TableAdapter güncelleştirme yöntemi

TableAdapter bağdaştırıcıları veritabanından okuma ve yazma yapmak için veri komutlarını kullanır. TableAdapter'ın ilk Fill (ana) sorgusunu, InsertCommandilişkili veri tablosunun şemasını ve yöntemiyle TableAdapter.Update ilişkili , UpdateCommandve DeleteCommand komutlarını oluşturmak için temel olarak kullanın. TableAdapter'ın Update yöntemini çağırmak, TableAdapter Sorgu Yapılandırma Sihirbazı ile eklediğiniz ek sorgulardan biri değil, TableAdapter ilk kez yapılandırıldığında oluşturulan deyimleri çalıştırır.

TableAdapter kullandığınızda, normalde gerçekleştirdiğiniz komutlarla aynı işlemleri etkili bir şekilde gerçekleştirir. Örneğin, bağdaştırıcının yöntemini çağırdığınızda, bağdaştırıcı Fill özelliğinde SelectCommand veri komutunu çalıştırır ve sonuç kümesini veri tablosuna yüklemek için bir veri okuyucu (örneğin, SqlDataReader) kullanır. Benzer şekilde, bağdaştırıcının Update yöntemini çağırdığınızda, veri tablosunda değiştirilen her kayıt için uygun komutu ( UpdateCommand, InsertCommandve DeleteCommand özelliklerinde) çalıştırır.

Dekont

Ana sorguda yeterli bilgi varsa InsertCommand, UpdateCommand ve DeleteCommand komutları TableAdapter oluşturulduğunda varsayılan olarak oluşturulur. TableAdapter'ın ana sorgusu tek bir tablo SELECT deyiminden fazlaysa, tasarımcı , UpdateCommandve DeleteCommandoluşturamazInsertCommand. Bu komutlar oluşturulmazsa, yöntemini çalıştırırken TableAdapter.Update bir hata alabilirsiniz.

TableAdapter GenerateDBDirectMethods Özelliği

, , UpdateCommandve DeleteCommandtabloadaplayıcılarına InsertCommandek olarak, doğrudan veritabanında çalıştırabileceğiniz yöntemlerle oluşturulur. Veritabanındaki verileri işlemek için bu yöntemleri (TableAdapter.Insert, TableAdapter.Updateve TableAdapter.Delete) doğrudan çağırabilirsiniz. Bu, ilişkili veri tablosu için bekleyen eklemeleri, güncelleştirmeleri ve silmeleri işlemek üzere çağırmak yerine kodunuzdan bu tek tek yöntemleri çağırabileceğiniz TableAdapter.Update anlamına gelir.

Bu doğrudan yöntemleri oluşturmak istemiyorsanız TableAdapter'ın GenerateDbDirectMethods özelliğini false ( Özellikler penceresinde) olarak ayarlayın. TableAdapter'a eklenen ek sorgular tek başına sorgulardır; bunlar bu yöntemleri oluşturmaz.

Null atanabilir türler için TableAdapter desteği

TableAdapters null atanabilir türleri ve T?Nullable(Of T) destekler. Visual Basic'teki null atanabilir türler hakkında daha fazla bilgi için bkz . Null Atanabilir Değer Türleri. C# dilinde null atanabilir türler hakkında daha fazla bilgi için bkz . Boş değer atanabilir türleri kullanma.

TableAdapterManager başvurusu

Varsayılan olarak, ilişkili tabloları içeren bir veri kümesi oluşturduğunuzda TableAdapterManager sınıfı oluşturulur. Sınıfın oluşturulmasını önlemek için veri kümesinin özelliğinin Hierarchical Update değerini false olarak değiştirin. İlişkisi olan bir tabloyu Bir Windows Formu veya WPF sayfasının tasarım yüzeyine sürüklediğinizde, Visual Studio sınıfının bir üye değişkenini bildirir. Veri bağlamayı kullanmıyorsanız değişkeni el ile bildirmeniz gerekir.

TableAdapterManager sınıfı bir .NET türü değil. Bu nedenle, belgelerde arama yapamazsınız. Veri kümesi oluşturma işleminin bir parçası olarak tasarım zamanında oluşturulur.

Sınıfın sık kullanılan yöntemleri ve özellikleri TableAdapterManager şunlardır:

Üye Açıklama
UpdateAll Yöntem Tüm veri tablolarındaki tüm verileri kaydeder.
BackUpDataSetBeforeUpdate Özellik yöntemini yürütmeden TableAdapterManager.UpdateAll önce veri kümesinin yedek kopyasının oluşturulup oluşturulmayacağını belirler. Boolean.
tableNameTableAdapter özelliği TableAdapter'i temsil eder. Oluşturulan TableAdapterManager, yönettiği her TableAdapter bir özellik için bir özellik içerir. Örneğin, Müşteriler ve Siparişler tablosuna sahip bir veri kümesi, ve OrdersTableAdapter özelliklerini içeren CustomersTableAdapter bir TableAdapterManager ile oluşturur.
UpdateOrder Özellik Tek tek ekleme, güncelleştirme ve silme komutlarının sırasını denetler. Bunu numaralandırmadaki TableAdapterManager.UpdateOrderOption değerlerden birine ayarlayın.

varsayılan olarak InsertUpdateDelete UpdateOrderolarak ayarlanır. Başka bir deyişle veri kümesindeki tüm tablolar için eklemeler, güncelleştirmeler ve silme işlemleri gerçekleştirilir.

Güvenlik

Bir CommandType özelliği olarak Textayarlanmış veri komutlarını kullandığınızda, 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. En iyi yöntem, mümkün olduğunda her zaman parametreli sorgular veya saklı yordamlar kullanmaktır.