Bu site emekli olmuştur. Arşiv amaçlı olarak BT AKADEMİ sponsorluğunda yayın hayatına devam etmektedir.




C#nedir?com
 
YAZAR HAKKINDA
Volkan Öner
Volkan Öner
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
3 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler:  ADO.NET/SQL Volkan Öner
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : Başlangıç
Kategori : ADO.NET/SQL
Yayınlanma Tarihi : 12.10.2003
Okunma Sayısı : 76923
Yorum Sayısı : 2     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
Silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
emre TAŞ
silindi
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer
Conda install environment.yml Package 26.12.2024
Turhal Temizer
Mac OS/X Removing CUDA 26.12.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak 26.12.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi 26.12.2024
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
Dataset’ den Veritabanı Güncellemeleri
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
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
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
6
2010
ben kendime göre degiştim fakat söyle bir hata veriyor. crow["Isim"]="Isim"; Isim sutunu Members tablosunda bulunamadı diyor.burayı bir türlü geçemedim.tablonun adıda dogru sutunun adı da dogru fakat olmadı bir türlü.Neden olabilir?
TEM
30
2004
Kodlar içerisine cnn.open() dan sonra da.fill(ds,"categories") komutunu eklemeyi unutmuşum. Özür dilerim
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • 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