|
Dataset’ den Veritabanı Güncellemeleri |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bildiğimiz gibi dataset nesneleri sanal veritabanları
olarak tabir edebileceğimiz veritabanından bağımsız çalışan, veritabanlarındaki
gibi birden fazla tablo barındırabilen ve bu tablolar içerisindeki kayıtlar
arasında ilişki kurabilen veri bloklarıdır.
Bu yazıdaki hedefimiz datasetlerin kullanımını
öğrenmek değil. Bu yüzden dataset hakkında belli bilgiye sahip olduğunuzu
varsayıyorum.
Veritabanı güncellemelerini dataset nesnesi
kullanmadan da yapmak mümkün; bunun en basit şekli Command nesnemizin
ExecuteNonQuery metodunu kullanmak. Ancak programlarımızda dataset nesneleri
kullanıyorsak bu nesneler üzerindeki değişikleri de veritabanımıza geri
yansıtmamız mümkün.
DataAdapter’ dan Dataset’ e Bilgi
Aktarımı
Dataset’ i veritabanı bilgileri ile doldurmak için
.NET data sağlayıcıları kendi DataAdapter’ larını kullanmak zorundadırlar: OLE
DB .NET data sağlayıcısı için OleDbDataAdapter nesnesi ve SQL Server .NET data
sağlayıcısı içinse SqlDataAdapter nesnesi kullanılır. Bu doldurma
işleminin yapılması için DataAdapter’ ın Fill metodu kullanılır. Örneğin: (Sql
Server için)
DataSet ds=new DataSet();
SqlConnection cnn=new SqlConnection("server=local\\vsdotnet;trusted_connection=yes;database=northwind");
SqlDataAdapter da=new SqlDataAdapter("select
* from categories",cnn);
cnn.open()
da.Fill(ds,"categories");
cnn.close();
|
Bu komut bloğunda görüleceği üzere önce northwind
veritabanı ile bağlantımızı kuruyor, daha sonra SqlDataAdapter nesnemizin
yapıcısına Select sql komutumuzu yazarak veri kaynağımıza bağlıyoruz. Burada
dikkat etmemiz gereken, SqlDataAdapter yapıcısındaki sql komut parametresinin
mutlaka Select sql komutu olmasıdır. Daha sonra “categories” tablosundaki
verileri ds adlı dataset nesnesine aktarmak için Fill metodumuzu
kullanıyonıyoruz. Fill metod parametresinde kullandığımız “categories” dataset’
in içerisindeki tablonun ismidir. Bu opsiyoneldir, istersek tablo ismi vermeden
de dataset doldurabiliriz. Bu durumda dataset tabloya default olarak “table”
ismini verir. Neyse çok fazla uzatmadan datasetten veritabanı güncellemesine
geçmek istiyorum. Şimdiye kadar yaptıklarımız hepsi birer hazırlık aşamasıydı.
Dataset Güncellemeleri
Güncelleme dediğimizde aklımıza aslında dataset’ e
yeni kayıt ekleme, kayıt silme, kayıt güncelleme gibi terimler gelmesi
gerekiyor. Yukarıda doldurduğumuz dataset üzerinde şimdi değişiklik yapacağız
ve bu değişiklilerin nasıl veritabanına geri yansıtıldığını göreceğiz.
Öncelikle biraz teknik bilgi:
Dataset’ te yapılan değişikler, veritabanına Update
metodu ile gönderilir. Bu olayın nasıl gerçekleştiğini şu örnekle inceleyelim.
Dataset içerisine aktarılan veriler şöyle olsun:
(RowState)
|
CustomerID
|
Name
|
Status
|
(Unchanged)
|
C200
|
Robert Lyan
|
Good
|
(Unchanged)
|
C400
|
Nancy Buchanan
|
Pending
|
Uygulamamızda “C400” CustomerID’ li müşterimizin
Status bilgisini DataSet içerisinde “Preffered” olarak değiştirdik diyelim. Bu
değişiklik sonucunda DataRow.RowState özelliği, değişen satırlar için
Unchanged’ den Modified’ a döner. Yani DataSet içeriği söyle olur:
(RowState)
|
CustomerID
|
Name
|
Status
|
(Unchanged)
|
C200
|
Robert Lyan
|
Good
|
(Modified)
|
C400
|
Nancy Buchanan
|
Preffered
|
İşte bu sırada DataAdapter nesnemizin Update metodunu
çalıştırdığımızda, Update metodu her satırı denetler. İlk satır için
veritabanına hiçbir Sql komutu gönderilmez, çünkü RowState özelliğinin değeri
“Unchanged” olarak kalmıştır. Buradaki RowState özelliği DataSet’ i oluşturan
DataTable nesnesinin her DataRow nesnesinde bulunan bir özelliktir. Ancak
ikinci satır için, Update metodu otomatik olarak komutu uyarır ve bu komutu
veritabanı gönderip orada işlettirir. Bu komutu uyarma işlemi kafanızı
karıştırmış olabilir: Update metodu RowState özelliğindeki duruma göre
DataAdapter nesnemizde tanımladığımız komutu arar ve onu çağırır: RowState
özelliği değişen satırlar için Modified”, dataset’ e yeni eklenen satırlar için
“Added” ve silinen satırlar için “Deleted” değerlerini alır ve DataAdapter
nesnesinden Modified satırlar için UpdateCommand, Added satırlar için
InsertCommand ve Deleted satırlar içinse DeleteCommand’ da tanımlanmış Sql
komutlarını veritabanına gönderir ve değişikliklerin orada da olmasını sağlar.
İşte bütün bu özelliklerin çalışmasını sağlayan Update metodudur.
Şimdi bu anlattıklarımızı bir örnekte pekiştirelim.
DataSet ds=new DataSet();
SqlConnection cnn=new SqlConnection("server=local\\vsdotnet;trusted_connection=yes;database=northwind");
SqlDataAdapter da=new SqlDataAdapter("select
* from categories",cnn);
//veritabanına işlenecek bilgiler için
gerekli sql komutumuzu tanımlıyoruz
da.UpdateCommand=new SqlCommand("update
categories set categoryname=@categoryname,description=@description where
categoryID=@categoryID",cnn);
//parametreler tanımlanıyor
da.UpdateCommand.Parameters.Add("@categoryname",SqlDbType.NVarChar,15,"categoryname");
da.UpdateCommand.Parameters.Add("@description",SqlDbType.NVarChar,50,"description");
da.UpdateCommand.Parameters.Add("@categoryID",SqlDbType.Int,0,"categoryID");
cnn.Open();
//Datasetimizi güncelliyoruz
DataRow crow=ds.Tables["categories"].Rows[0];
crow["categoryname"]=”kategoriadı”;
crow["description"]=”tanımlama”;
da.Update(ds,"categories");
cnn.Close();
|
Öncelikle veritabanı bağlantımızı kuruyoruz. Sonra
SqlDataAdapter nesnemizi tanımlıyoruz. Bu nesne sayesinde dataset nesnemize
veri aktarabilip, dataset nesnemizdeki güncellemeleri veritabanımıza geri
aktarabileceğiz. DataSet nesnemiz üzerinde veri güncelleme yapacağımız için
DataAdapter nesnemizin UpdateCommand özelliğine update sql komutunu
aktarıyoruz. Burası önemli çünkü dataset nesnemizde ne tür değişiklik
yapıyorsak(veri güncelleme, veri ekleme yada veri silme), uygun özellikleri
kullanmak zorundayız (InsertCommand, UpdateCommand, DeleteCommand). Aksi
takdirde programımızda hatalar oluşur. Bu programda UpdateCommand özelliğini
kullanıyor ve sql komutumuzda belirttiğimiz parametreleri tanımlıyoruz.
Parametre tanımlama başlı başına ayrı bir makale konusudur, bu yüzden burada
parametreleri inceleyemeyeceğiz.
DataSet nesnemizde de gerekli değişikleri yaptıktan
sonra, Update metodumuzu çalıştırıyoruz. Update metodu DataSet nesnemizdeki
değişiklikleri yukarıda bahsettiğimiz şekilde algılıyor ve DataRow
nesnelerimizdeki RowState özelliğini kontrol ederek, DataAdapter nesnemizde
tanımlanmış uygun komutları arıyor. Bu örnekde “0” indeksli satırımız
değiştikten sonra aynı satırdaki RowState özelliği “Unchanged” den “Modified” a
dönüyor ve Update metodu UpdateCommand özelliğindeki sql komutunu veritabanına
göndererek çalıştırılmasını ve datadet nesnemizdeki değişikliklerin
veritabanımızda da gerçekleşmesini sağlıyor. Eğer dataset nesnemize yeni satır
ekleseydik, Update metodu DataAdapter nesnesinde tanımlanmış InsertCommand
özelliğini arayacak ve bu özellikteki sql komutunu gönderecekti, yine tahmin
ettiğiniz gibi silinmiş satırlar için ise DeleteCommand özelliği aranacaktı.
Bu yazı işin tekniği konusunda sizi en azından bir
temel bilgi vermiştir umarım. Yakında bu konularda daha derin bilgiler vermeyi
düşünüyorum.
Şimdilik hoşçakalın.
Makale:
Dataset’ den Veritabanı Güncellemeleri ADO.NET ve SQL Volkan Öner
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|