C# üzerinde veritabanı işlemlerini gerçekleştirebilmek için .NET çatısı altındaki veritabanı sınıfları ve bunlardan türetilen nesneler kullanılmaktadır. Her bir nesnenin kendine özgü bir kullanım alanı olmakla birlikte neredeyse her nesne, bir veya birkaç nesne ile bağlantılı çalışmaktadır.
C# işlemlerini gerçekleştirirken öncelikle kullandığımız veritabanına uygun sınıfın seçilmesi gerekmektedir.
OleDbConnection ve SqlConnection Nedir?
Her iki sınıf da veritabanı bağlantısı sağlamak için kullanılır. Ancak OleDb sınıfları, tüm veritabanları ile uyumluyken SqlClient sınıfları Microsoft SQL Server (MSSQL) ile uyumludur. SqlClient sınıfları bu yüzden MSSQL üzerinde oldukça hızlı bir şekilde çalışır ve MSSQL’in tüm faydalarından yararlanmamızı sağlar.
Tüm veritabanları ile uyumluluğun sağlanması açısından OleDb nesneleri üzerinde örnekler geliştirilecektir. Yine de OleDb ve SqlClient arasında, temel konular üzerinde hiçbir fark yoktur, nesne isimlerini değiştirmek yeterli olacaktır.
Bağlantı Nesnesi: OleDbConnection
Veritabanı ile çalışmanın ilk koşulu, çalışılan veritabanına bağlantı sağlamaktır. Bunun için OleDbConnection sınıfı kullanılacaktır. Bu sınıf, bağlantı cümlesi dediğimiz, veritabanı programı veya bağlanmak istediğimiz sunucunun bilgilerini içermektedir.
Ancak bağlandığımız sunucunun bazı gereksinimleri doğrultusunda bu bağlantı cümleleri değişecektir. Bu bağlantı cümlelerinin nasıl oluşturulacağını ezberlemek yerine Visual Studio üzerinde bağlantı cümlesini elde etmek en kolay yöntemdir. Bağlantı cümlesinin nasıl oluşturulacağı … başlıklı yazıda anlatılmıştır.
OleDbConnection sınıfından baglanti adında bir nesne türetilmek istenirse;
1 | OleDbConnection baglanti = new OleDbConnection(@"bağlantı cümlesi"); |
Burada bağlantı cümlesi, Visual Studio içinde elde edilen bağlantı bilgileri olacağından aşağıdakine benzer şekilde bir kod yazılması gerekmektedir:
1 2 | OleDbConnection baglanti = new OleDbConnection(@"Data Source=HURKAL\SQLEXPRESS; Initial Catalog=okul;Integrated Security=True"); |
OleDbDataAdaptor ve OleDbCommand
Her iki sınıftan türetilen nesne de veritabanı üzerinde komut çalıştırmak için kullanılır. Ancak kullanılan komutlar ve verilerin getirilme şekline göre OleDbDataAdaptor veya OleDbCommand nesnelerinden uygun olanlar kullanılır.
Kullanım Türleri
Kullanılan veritabanı komutu ve verilerin döndürülme şekline göre olası durumlar aşağıdaki gibidir:
- SELECT ile tablo şeklinde veri elde etme
- SELECT ile tek bir veri elde etme (kişi sayısı, öğrencinin adı vb.)
- INSERT, DELETE veya UPDATE ile tablolarda değişiklik yapma
Bu 3 durum için farklı nesneler ve nesnelerin farklı metotları kullanılmaktadır.
1. SELECT ile Tablo Şeklinde Veri Elde Etme
Personel tablosundaki veriler, bir sınıftaki öğrencilerin ad ve soyad bilgileri, bir markette hiç satılmayan ürünler gibi bilgiler, tablo yapısı şeklinde elde edilir. Bu sebeple, veritabanından gelen verileri karşılayabilecek veri tiplerine ihtiyaç duyulur. Bu iş için DataTable sınıfından yararlanılabilir.
Tablo tipinde veri elde etmek için OleDbDataAdaptor sınıfından nesne türetmek gerekir.
1 | OleDbDataAdaptor komut = new OleDbDatadaptor("SELECT * FROM ...", baglanti); |
Bu örnekte türetilen komut nesnesi, SQL cümlesi ve bağlantı nesnesini parametre olarak kabul etmektedir. Buradan gelen tablo şeklinde veriyi, DataTable nesnesinde tutabiliriz.
1 | DataTable dt = new DataTable(); |
Ardından, OleDbDataAdaptor içindeki Fill() metodu ile oluşturulan DataTable nesnesi doldurulur.
1 | komut.Fill(dt); |
Buradan dönen verinin Form nesneleri üzerinde kullanılabilmesi için veri kabul eden nesnelerin DataSource özelliği kullanılır. DataGridView nesnesine dönen verilerin aktarılabilmesi için aşağıdaki komut kullanılabilir:
1 | dataGridView1.DataSource = dt; |
2. SELECT ile Tek Veri Elde Etme
Eğer bir sınıftaki öğrenci sayısı, bir öğrencinin adı, marketin toplam cirosu gibi tek bir değer elde edilmek isteniyorsa OleDbCommand nesnesi kullanılabilir.
1 | OleDbCommand komut = new OleDbCommand("SELECT | INSERT | UPDATE | DELETE ...", baglanti); |
Örnekten de anlaşılabildiği gibi OleDbCommand sınıfından türetilen komut nesnesine SELECT, INSERT, UPDATE veya DELETE komutları gönderilebilir. Aynen OleDbDataAdaptor nesnesinde olduğu gibi, baglanti nesnesini kabul eder.
SELECT komutu ile elde edilen tek bir veriyi kullanmak için ExecutScalar() metoduna başvurulur. Bu metot, object tipinde veri döndürdüğünden tip dönüşümü yapılarak kullanılabilir.
1 | komut.ExecuteScalar(); |
3. INSERT, DELETE veya UPDATE ile Değişiklik Yapma
Tablo üzerindeki veriler üzerinde değişiklik yapmak için yine OleDbCommand sınıfından türetilen nesneye başvurulur. Komutu veritabanına gönderebilmek için ExecuteNonQuery() metodu kullanılır. Bu metot, INT tipinde veri döndürür. Bu veri, veritabanında etkilenen kayıt sayısını göstermektedir. Buradan dönen değer ile verinin silinip silinmediği, kaç adet kayıt eklendiği veya değiştirildiği gibi durumlar kontrol edilebilir.
1 | komut.ExecuteNonQuery(); |
Buradan dönen değer, sonuc adında bir değişkende tutulabilir.
1 2 3 4 5 6 7 8 9 | int sonuc = komut.ExecuteNonQuery(); if (sonuc>0) { mesaj = "İŞLEM GERÇEKLEŞTİRİLDİ."; } else { mesaj = "İŞLEM YAPILAMADI."; } |