Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

ADO.NET Disconnected Mimari-SqlDataAdapter Ayrıntılı Anlatım

Bu yazımda SqlDataAdapter nesnesine ayrıntılı bir giriş yapacağız.Bir önceki yazımda yüzeysel olarak değinmiştim.Öncelikle SqlDataAdapter nesnesinden bahsedelim.
SqlDataAdapter Nesnesi
İçine yazılan select sorgusuna göre otomatik olarak insert,update ve delete sorgularını yazan bir kontroldür.Bu kontrolü kullanırken bağlantıyı açıp kapatmaya gerek yoktur.Kendisi açıp işi bittiğinde kapatır.Sorguya göre tablo veya tabloların hepsini çeker ve bunları DataSet ya da DataTable gibi nesnelere yükleyebilmemizi sağlar.
Bu yazımdan sonra DataGridView nesnesinin kullanımıyla ilgili yazı hazırlayacağım.Şimdilik DataGridView in nasıl kullanıldığıyla ilgili bir fikriniz olmasada örnek olarak bu kontrolü vereceğim.DataGridView’e bağlı olan DataTable üzerinden yaptığımız değişiklikler(insert,update ve delete) fiziksel tabloya yansımayacaktır.RAM de oluşturulan tabloda değişiklikler yapılacak ve öylede kalacaktır.Bu değişiklikleri fiziksel tabloya yansıtma özelliği SqlDataAdapter nesnesinde vardır.Ancak SqlDataAdapter nesnesinin InsertCommand,UpdateCommand ve DeleteCommand özellikleri için gerekli sorgular oluşturulmalıdır.

            SqlConnection baglanti = new SqlConnection("server=GENÇAY-GENÇAY;database=northwind;trusted_connection=true;");
            SqlDataAdapter dta = new SqlDataAdapter("select * from Personeller",baglanti);
            DataTable dt=new DataTable("Personeller");
            dta.Fill(dt);

Yukarda SqlDataAdapter nesnesini tanımladık.Şunada değinmek isterim ki SqlDataAdapter nesnesinin içine select sorgusundan başka bişey yazamazsınız.Select sorgusuda otomatikman SelectCommand özelliğine yazılıyor.

            dta.InsertCommand = "insert into..";
            dta.DeleteCommand = "delete from ..";
            dta.UpdateCommand = "update ..";

Şimdi bu özellikler için gerekli sorguları oturup elimizle manuel oluşturmayacağız.Çünkü SqlDataAdapter nesnesi kendisi otomatikman bu sorguları oluşturabiliyor.Bunu oluşturabilmesi için SqlCommandBuilder sınıfından yardım alıyoruz.

            SqlCommandBuilder cmdb = new SqlCommandBuilder(dta);
              ya da
            SqlCommandBuilder cmdb = new SqlCommandBuilder();
            cmdb.DataAdapter = dta;

Artık SqlCommandBuilder sınıfı sayesinde InsertCommand,DeleteCommand ve UpdateCommand özelliklerine sorgular yazılmıştır.
Artık bu sorgular yazıldığına göre herhangi bir delete,update ya da insert işlemi olursa bu SqlDataAdapter sayesinde içindeki tabloyu güncellememiz gerekecektir.
Bunuda SqlDataAdapter nesnesinin Update() metodu sayesinde yapıyoruz.

       dta.Update(dt);

Artık SqlDataAdapter nesnesi sayesinde veritabanımıza işlem yapabiliyoruz.
DataTable daki her bir satırın DataRowVersion isimli özelliğinde o satırın durumu saklanır.Bu durumlar Unchanged,deleted,inserted ya da modified dir.DataGridView üzerinde yaptığımız işlemler aslında DataTable üzerinde yaptığımız işlemlerdir.Dolayısıyla bir işlem yapıldığında DataTable in DataRowVersion’larını değiştirecektir.
Update() metodu çalıştığında,metoda verilen DataTable in DataRowVersion’ları kontrol edilecektir.Eğer modifed ise nesnenin UpdateCommand’ı,deleted ise nesnenin DeleteCommand’ı ya da inserted ise nesnenin InsertCommand’ı çalıştırılarak veriler fiziksel tabloya kaydedilecektir.
Dikkat!!!
Eğer DataTable içindeki tablo başka tablolar ile ilişkili ise bu durumda ilişkili kayıtlarla çalışabilmek için o tablonun primary key ve foreign key yapılarının da SqlDataAdapter ile çekilirken verilmesi gerekir.
Yukarıdaki “select * from personeller” sorgusu bu keyleri getirmez.Eğer keylerde gelsin istiyorsak bu durumda aşağıdaki sınıfı kullanmamız gerekiyor.

       dta.MissingSchemaAction = MissingSchemaAction.AddWithKey;

Yukardaki komut,referans adı dta olan SqlDataAdapter tipindeki nesnenin SelectCommand’ındaki gelen tablonun keylerinide getir demektir.
Bu yazımda burda sona eriyor..Bir sonraki yazımda DataGridView anlatımı yapacağım.Kesinlikle okuyun :).İyi çalışmalar.

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. Korkmaz dedi ki:

    Mantık olarak disconnected mimarinin varlığının açıkayan gerçek bir makale olmuş, benim kafadan olan yazılmıcılar için çok faydalı oldu

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*