.NET Framework uygulamalarında TableAdapters kullanarak veri kümelerini doldurma
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.
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.
Not
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:
TableAdapter'lar Veri Kümesi Tasarımcısı ile tasarlanırken, TableAdapter sınıfları iç DataSetiçe sınıfları olarak oluşturulmaz. Her veri kümesine özgü ayrı ad alanlarında bulunurlar. Örneğin, adlı NorthwindDataSet
bir 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, , UPDATE
ve DELETE
komutlarını Özellikler penceresinde el ile yapılandırabilirsinizINSERT
.
TableAdapter sorguları
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ımcısı'ndaki TableAdapter'ın Temel Sınıf özelliğinde öğesinden Component tü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ı Orders
veritabanı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ımcısı'ndaki 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, InsertCommand
ilişkili veri tablosunun şemasını ve yöntemiyle TableAdapter.Update
ilişkili , UpdateCommand
ve 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
, InsertCommand
ve DeleteCommand
özelliklerinde) çalıştırır.
Not
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ı , UpdateCommand
ve DeleteCommand
oluşturamazInsertCommand
. Bu komutlar oluşturulmazsa, yöntemini çalıştırırken TableAdapter.Update
bir hata alabilirsiniz.
TableAdapter GenerateDBDirectMethods Özelliği
, , UpdateCommand
ve DeleteCommand
tabloadaplayıcılarına InsertCommand
ek 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.Update
ve 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 mülk |
yöntemini yürütmeden TableAdapterManager.UpdateAll önce veri kümesinin yedek kopyasının oluşturulup oluşturulmayacağını belirler. Boolean. |
tableName TableAdapter ö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 mülk |
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 UpdateOrder olarak 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.