C# ADO.NET ile Veritabanı İşlemleri

Merhaba arkadaşlar,

Bu yazımda C# ile birlikte veritabanı işlemlerini ele almaya çalışacağız. Bunu yaparken de günümüzde güncel kullanılan veritabanı yaklaşımları (EntityFramework ORM vs…) ile değil de ADO.NET kütüphanesini kullanarak yapmaya çalışacağız. Yani System.Data isim alanında bulunan yapıları ele alıp bu yapılar hakkında bilgilendikten sonra veritabanı ile ilgili temel düzeyde işlemler (crud) yapıyor olacağız.

ADO.NET kütüphanesini kullanarak veritabanı işlemlerini yaparken hazır veritabanı kullanacağız. Bu veritabanı açık kaynak olan Northwind veritabanı olacaktır. Northwind veritabanı örneğini bu kaynaktan indirebilirsiniz. ( Northwind veritabanı Microsoft’un sağlamış olduğu ücretsiz içerisi dolu bir veritabanı örneğidir)

ADO.NET‘e giriş yapıp, System.Data isim alanında bulunan yapıları incelemeye başlayalım:

ADO.NET ile Veritabanı İşlemleri

ADO.NET, veritabanlarındaki bilgileri elde etmek veya veri tabanında bulunan verileri değiştirmek için geliştirilmiş bir ver erişim aracıdır. ADO.NET .NET sınıf kütüphanesindeki System.Data isim alnındaki sınıfların tamamını temsil eder. Kısace ADO.NET .NET platformu için geliştirilmiş, offline çalışabilen, web uygulamalar gibi n-katmanlı uygulamalarda büyük kolaylık sağlayan veri erişim teknolojisidir.

ADO.NET modeli ile veriye erişim olarak iki ana metot kullanılır

  • Online Erişim (Connected Access)
  • Offline ERişim (Disconnected Access)
  • ADO.NET iki yeni nesne modeli sunar. Bunlar DataSet ve DataAdapter nesneleridir.
  • ADO.NET modeli ile yüksek performans sağlanır
  • Doğrudan XML Desteği verir.

DataSet, veritabanında bulunan bir veya daha fazla tablonun içinde barındırdığı tablolar koleksiyonudur.

ADO.NET veri erişimi olarak iki tür destek verir: birincisi SQL Server ile yüksek performanslı erişim, ikincisi ise OLEDB protokolünü destekleyen diğer veritabanlarına bağlanmaktır.

ADO.NET Nesne Modeli

ADO.NET kapsamındaki bütün sınıflar System.Data.Dll isimli tek bir assembly’de toplanmıştır.

System.DataADO.NET in temel isim alanıdır. Veriyi sembolize eden veri türleri burada bildirilmiştir. Kısacası ADO.NET mimarisinin temel yapı taşlarını oluşturan sınıflar bu isim alanında bulunur.
System.Data.CommonBu isim alanı managed provider dediğimiz veri erişim kanalları kullanan sistemlere yönelik sınıfları içerir
System.Data.OleDbOLEDB protokolünü destekleyen veritabanı sistemlerine erişmek için kullanılan sınıflar bu isim alanında bulunur
System.Data.SqlClientMS SQL Server için özel geliştirilmiş OLEDB protokolünü destekleyen veri tabanına bağlanmak için kullanılan sınıflar bu isim alanında bulunur
System.Data.SqlTypesBu isim alanında bulunan veri tipleri, MS SQL Server içinde desteklenen doğal veri türlerini içerir.

Veritabanına bağlanmak

Bir veri kaynağına erişmek için veri bağlantısına ihtiyacımız vardır. Bu bağlantıda bağlantı türü ve bağlantının yapılacağı veri kaynağının türü belirtilir. Veri kaynağı olan bağlantıyı sembolize eden sınıflar SqlConnection ve OleDbConnection’dır.

Örnek uygulamalarda Veri-tabanına bağlanmak için OleDbConnection sınıfını kullanacağız. Bunun sebebi OleDbConnection sınıfının Hem SQL Sunucusuna hem de diğer veritabanlarına bağlanabiliriz.

SQL Server sunucusuna erişmek için özelleştirilmiş SqlConnection ve OleDb sınıfı ile veri tabanına bağlanma

Not: OleDb ile hem SQL Sunucusuna hem de diğer veritabanlarına bağlanabiliriz!

OleDbCommand ve OleDbDataReader

OleDbCommand nesnesi bir veri kaynağındaki tablodan SQL cümleciği kullanarak sorgulama yapmamızı sağlar. OleDbDataReader sınıfı ise OleDbCommand nesnesi ile çalıştırılması durumunda elde edilen sonuçları okumak için kullanılır.

OleDbCommand nesnesini bir SQL sorgu ve bağlantı nesnesi ile oluşturabiliriz.

OleDbCommand nesnesini CommandType özelliği ile komutun ne şekilde etkileneceğini bildirebiliriz. CommandType numaralandırması ile bu özellik Text, StoredProcedure ya da TableDirect olacak şekilde ayarlanabilir.

OleDbCommand nesnesi ile veri tabanındaki Stored Procedure (kaydedilmiş sorgu) çalıştırabilir ve parametreleri geçebiliriz.

OleDbCommand üzerinden bir komutu çalıştırmak için 4 farklı metot kullanılabilir.

ExecuteNonQuery: Bu metot ile genellikle veri-tabanındaki kayıtları değiştirmek, silmek ya da güncellemek için kullanırız. Geri dönüş değeri etkilenen kayıt sayısını ifade eder.

ExecuteScalar: Bu metot ile veri-tabanından tek bir değer elde edilir. Örneğin tablodaki kayıt sayısını elde etmek için kullanılan COUNT özelliğinde kullanabiliriz.

ExecuteReader: Bu metot ile genelikle SQL Select sorgularında sıklıkla görülür. Select komutundan sonra elde edilen verileri okumak için kullanılır.

ExecuteXmlReader: Bu metot sadece SqlCommand ile uygulanabilir. SQL Server verileri XML şeklinde elde etmek için çeşitli komutlar sağlamıştır.

Dataset, DataAdapter, DataTable, DataRow, DataColumn

DataSet, veri kaynağından bağımsız olarak veriler üzerinde işlem yapmamıza ve gerektiğinde DataAdapter yardımı ile DataSet üzerindeki verileri tekrar veri tabanına aktarmamızı sağlar.

DataAdapter, veri kaynağı ile DataSet nesneleri arasındaki bağlantıyı sağlar.

DataTable, bir veri kaynağındaki tablolara benzer. Yani bir DataTable nesnesinde sütunlar ve verileri içeren kayıt satırları içermektedir. DataTable nesnesinin columns özelliği ile tablodaki sütunlar DataColumn koleksiyon şeklinde verilir. Aynı şekilde Rows özelliği de tablodaki satırları bir DataRow koleksiyonu şeklinde verir.

DataColumn özelliği bir tablodaki sütunları ifade eder ve temsil edilen bir sütunun veri türü C#’ta herhangi bir veri türü olabilir.

DataRow nesnesi ise bir tablodaki satırları temsil eder.

Bu özellikleri kullanarak veri tabanından istediğimiz verileri alıp ekrana yazdırıyoruz.

ADO.NET 2.0 ve DbProviderFactory (Veri Sağlayıcı Bağımsız Erişim)

ADO.NET 2.0’a eklenen soyut nesneler ile yapılmaktadır. ADO.NET için farklı veritabanı sistemleri ile çalışan farklı nesneler bulunmaktadır. Örneğin SqlConnection, OleDbConnection, OracleConnection gibi.

Veri tabanı sistemlerine erişirken hem veritabanı bağımsızlığı sağlamakj hem de bağlanma sırasında kendi sağlayıcılarını (provider) kullanarak perofrmanstan ödün vermeyerek yeni bir sistem geliştirilmiştir. Bu sistem literatürde abstract factory (soyut fabrika) denilen bir tasarım deseni ile gerçekleşmiştir. .Net 2.0 içerisinde 5 adet DbProviderFactory nesnesi bulunmaktadır.

Önemli: Output'ta 2 DbProviderFactory olmasının sebebi çalışılan bilgisayarda SqlClient ve OleDb kayıtlı olduğu için.

Bu yazımda ADO.NET kütüphanesi ile temel veritabanı işlemleri nasıl gerçekleştiğini inceledik. ADO.NET hakkında edindiğim bilgileri paylaşmaya çalıştım. Umarım faydalı olmuştur 🙂

Bir sonraki yazımda görüşmek dileğiyle

Kaynaklar:

Her Yönüyle C# 7.0, Sefer Algan, Pusula Yayincilik

https://docs.microsoft.com/tr-tr/dotnet/framework/data/adonet/

Leave a Comment