Yazan : Şadi Evren ŞEKER

Gelen bir soru üzerine C# ile MS SQL server’dan veri çekmeyi adım adım kod üzerinden inceleyelim. Öncelikle veri çekmek için gereken adımları sıralayalım:

  • Veri tabanına C# dilinde kullanıcı ve şifre ile bir bağlantı oluşturulur.
  • Açılan bağlantı üzerinde bir sorgu (Query) çalıştırılır.
  • Sorgu (query) sonucu bir veri yapısında (data structures) saklanır. (C# için tercihen datatable)

Şimdi yukarıdaki adımları sırasıyla inceleyelim ve kod üzerinde yazmaya çalışalım.

Veri tabanına CSharp ile bağlantı

Temel olarak bir veri tabanından bir dil vasıtasıyla bilgi çekmek için öncelikle bu veri tabanına dilden bir bağlantı oluşturmak gerekir. Bu bağlantı ODBC (Open Database Connectivity) ismi verilen ve bütün veri tabanlarının desteklediği genel bir bağlantı olabilir veya dile özgü bağlantı (native connection) kullanılabilir. Kısaca dile özgü bağlantı, ODBC’ye göre daha başarılıdır. Bunun sebebi o dil ve o veritabanı arasında özel olarak yazılmış ve iyileştirilmiş olmasıdır.

Bilindiği üzere C# ve MS SQL Server birbirleriyle iyi anlaşan teknolojiler olduğu için aralarında bir dile özgü bağlantı şansı bulunmaktadır. Bu bağlantı bizden sadece veritabanının ismini, IP adresini, kullanıcı ve şifre bilgilerini ister.

Bu bilgileri ilerde değiştirilebilir diye değişkenlerde tanımlıyoruz:

string Server = "localhost";
string Username = "kullanici";
string Password = "sifre";
string Database = "veritabani";

Yukarıdaki 4 değişkenin her birisine kurulumumuzdaki bilgileri giriyoruz. Yukarıdaki bu tanımdan sonra bağlantımızı oluşturabiliriz:

string ConnectionString = "Data Source=" + Server + ";";
ConnectionString += "User ID=" + Username + ";";
ConnectionString += "Password=" + Password + ";";
ConnectionString += "Initial Catalog=" + Database;

Görüldüğü üzere henüz hala değişken tanımlıyoruz. ConnectionString ismini verdiğimiz bu bağlantı değişkenini, değişkenlerden okumak yerine aşağıdaki şekilde de tanımlayabilirdik:

string ConnectionString = "Data Source=localhost;User ID=kullanici;Password=sifre;Initial Catalog=Veritabaniismi";

Bütün bu tanımlardan sonra artık bağlantıyı oluşturabiliriz. Bu işlem için C$ içerisinde hazır olarak gelen SqlConnection sınıfını (class) kullanacağız. Önce bu sınıftan bir nesne (object) tanımlıyrouz:

SqlConnection SQLConnection = new SqlConnection();

Tanımlanan bu SQLConnection ismli nesneyi kullanarak bağlantımızı aşağıdaki şekilde açabiliriz.

try
{
    SQLConnection.ConnectionString = ConnectionString;
    SQLConnection.Open();
}
catch (Exception Ex)
{
    // hata oldu kapatiyoruz
    if (SQLConnection != null)
        SQLConnection.Dispose();
    return;
}

Yukarıdaki kodda bağlantı satırları try bloğu içine alınmış ve beklenmedik bir hata (exception) oluşması durumunda catch bloğu yazılmıştır. Aslında SqlConnection sınıfının Open fonksiyonu sadece InvalidOperationException ve SqlException sınıflarını atar (throw) ancak tek bir Exception sınıfı ile de yakalanabilir (catch).

Veri Tabanında Sorgu

Bağlantıyı açtıktan sonra 2. ve 3. adımlar olan bağlantı üzerinden bir sorgu (query) çalıştırma ve sonucu bir veri yapısına alma aşamasına geçebiliriz.

Önce sorgumuzu bir değişkende tanımlayalım:

string SQLStatement = "SELECT * FROM Tablo";

Tanımın ardından dönen bilginin alınacağı veri yapımızı hazırlayalım. Bu örnekte C# içinde bulunan DataTable kullanacağız. Bu veriyapısına bilgi çekmek için yine C# içerisinde bulunan SqlDataAdapter sınıfından faydalanacağız.

SqlDataAdapter SQLDataAdapter = new SqlDataAdapter(SQLStatement, SQLConnection);

Yukarıdaki satırda tanımladığımız bağlantı üzerinden yine tanımladığımız sorgu çalıştırılarak SQLDataAdapter isimli nesneye sonuç atanmış ve işlenmeye hazır halde beklemektedir.

DataTable dtResult = new DataTable();

Hazırladığımız bu SQLDataAdapter nesnesinden veri okumak için bir veri tablosu dtResult tanımlıyoruz ve aşağıdaki satır ile içine veriyi dolduruyoruz.

SQLDataAdapter.Fill(dtResult);

Doldurulan veriyi kullanmak için (örneğin ekrandaki bir mesaj kutusunda göstermek için satır satır işleyen aşağıdaki döngüden faydalanılabilir:

foreach (DataRow drRow in dtResult.Rows)
{
    MessageBox.Show(drRow["KolonAdi"].ToString());
}

Bağlantının Kapatılması

Son olarak açık olan dataadapter ve bağlantıyı kapatıyoruz:

SQLDataAdapter.Dispose();
SQLConnection.Close();
SQLConnection.Dispose();

Yukarıda adım adım anlatılan kodun çalışması için System.Data.* paketinin projeye dahil edilmesi (using) gerekmektedir.

Yorumlar

  1. Reyhan

    Merhabalar
    Bu başlığın sorum için en uygun başlık olduğunu düşündüğüm üçün bu başlıkta yazıyorum sorumu ama alakasız olursa kusura bakmayın lütfen.

    ASP de web tabanlı bir telefon rehberi yapıyorum. Bu telefon rehberinde isme göre arama yaparken, ismi yazdığımda yanda list box da ya da bunun için daha uygun bir kontroller varsa onda isim soyisim çıkacak , kullanıcı ona tıklayıp isim soyisime göre tel no araması yapabilecek. Bunun için list boz kullanmaya çalıştım ancak bir türlü başramadım. Yardımcı olabilirseniz çokkk mumnun olurum.
    Şimdiden teşekkürler…

  2. soysal

    çok gerçek dışı bir kod yazımı(syntax) kullanılmış.Yordamlardan hiç bahsetmiyorum bile.Dataadapter nedir Allah aşkına ya.

Bir cevap yazın

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