Bu yazımda C# dili kullanarak bazı örnek veritabanı işlemleri yapağız. İşlemler temelde veritabanına bağlantı yapılarak gerçekleşecektir. Başlıca bahsetmek gerekirse tablodan datatable, combobox a veri çekme combobox ı autocomplate özelliği ile kullanma gibi işlemleri göreceğiz.
Öncelikle tablolardan veri çekmemiz için veritabanına bağlantımızı gerçekleştirerek başlayacağız. Ardından komut oluşturup çalıştıracağız ve dönen değerleri comboBox a iki yöntemle ekleyip kullanıcıya göstereceğiz.
Öncelikle eklememiz geren kütüphanemiz
using System.Data.SqlClient;
Bu kütüphanemiz ile sql veritabanımıza erişim için gerekli sınıfları tanımlamış oluyoruz. Peki bu sınıflar neler? İşte çok sık kullanacağımız belli başlı bazı sınıflar:SqlConnection: Bu sınıftan oluşturacağımız nesne ile veritabanına bağlanacağız. Bağlantı için bir connectionString göndereceğiz. Bunun açıklamasını aşağıda yapacağım.
SqlCommand: Bu sınıftan oluşturduğumuz nesneye server üzerinde çalışacak komutumuzu ve SqlConnection nesnemizi göndereceğiz.
SqlDataAdapter: Bu sınıftan oluşturduğumuz nesne çalışacağımız veritabanının bulunduğu server ile çalıştığımız cihaz arasında köprü görevi görerek SqlCommand nesnemiz ile çalışmaktadır. SqlDataAdapter nesnesi oluşturulduğunda sql komutumuz çalışacak ve sorgu çekmiş olacağız.
Çekilen sorgu neticesinde SqlDataAdapter' ın .Fill metodu ile datatable nesnemizi dolduracağız. Biz sql de çalışacağımız için SqlDataAdapter kullandık fakat yine sık kullanılan diğer veritabanları OleDb için OleDbDataAdapter, oracle için ise OracleDataAdapter kullanılır. Sorgu çekmek için SqlDataAdapter kullandığımızda bağlantıyı açmamıza veya sorgudan sonra bağlantıyı kapatmamıza gerek yoktur.
SqlDataReader : SqlDataReader sorgu sonucunun döndürülmesinde kullanılan diğer bir yöntemdir.
Sınıflarımızı tanıdıktan sonra kodlarımıza geçebiliriz. İlk olarak veritabanından verileri çekerek combobox a dolduralım. Bu işlemi SqlDataAdapter ve SqlDataReader kullanarak her iki yöntemlede gerçekleştirelim. MlocalDB adında bir veritabanım içerisinde ise ogrenciTb adında tablom ve tablomda ise ogrenci_id ve ogrenci_adi sutunlarım olsun.
string connectionString = "Data Source=.; Initial Catalog=MlocalDB; Integrated Security=True";
SqlConnection baglanti = new SqlConnection(connectionString);
connectionString tanımlamamızda localde çalışacağımızdan dolayı Data Source kısmını . tanımladık yani bu tanımlama server adresi için, Initial Catalog ile bağlanmak istediğimiz veritabanının adını yazdık, şimdi buraya dikkat: sql server da oturum açmamız için iki seçenek vardır bunlar; SQL Server Authentication ve Windows Authentication' dır. Eğer oturum Windows Authentication ile oluşturulmuş ise yani çalışılan makinada sql bulunuyor ise bu yerel bağlantı olacağından kullanıcı adı ve şifre gerekmeyecektir. Bu durumda Integrated Security=true denilir. Eğer yerelde çalışmıyorsak veya veri tabanına bağlantı için kullanıcı adı şifre gerekiyorsa bunu User ID=kullanıcıadı, Password=sifre yazarak Initial Catalog' tan sonra tanımlayabiliriz.
connectionString tanımlamamızı yaptık ve oluşturduğumuz bağlanti nesnemizle bağlantımızı yaptık. Şimdi sırada SqlCommand var.
SqlCommand cmd = new SqlCommand("SELECT * FROM ogrenciTb ORDER BY ogrenci_id", baglanti);
SqlCommand sınıfını tanıtırken bahsettiğim üzere çalıştıracağımız sql sorgusunu ve çalıştıracağımız bağlantımızı nesnemize bildirdik. Konunun anlaşılabilir olması açısından sorgumuz gayet basit. Çalıştırmak istediğimiz komutumuzuda hallettiğimize göre artık komutu birinci yöntemimiz olan SqlDataAdapter kullanarak çalıştıralım ve adaptörün bize döndüreceği değeri DataTable nesnesine dolduralım. 1. Yöntem-SqlDataAdapter
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataTable dtable = new DataTable();
adp.Fill(dtable);
Fill kelime anlamından da anlaşılacağı gibi doldurma görevini görüyor. artık adaptörümüzden döndürdüğümüz değerler dtable nesnemizde. Şimdi ise bunu comboBox ile kullanıcıya gösterelim.
comboBox1.DataSource = dtable;
comboBox1.DisplayMember = "ogrenci_adi";
comboBox.DisplayMember özelliği ile tablodan çektiğimiz öğrenci adlarını comboBox ta listeledik. Burada comboBox ın bir özelliğine değinmekte fayda var. DisplayMember ile gösterdiğim öğrencilerin aynı zamanda id lerinide tutmak istiyorsam burada comboBox.ValueMember özelliğini kullanabilim. Bu comboBox ın bize sağladığı bir kolaylık. Böylece listeden seçtiğim bir öğrencinin aynı zamanda id sinede ulaşmış olurum. Gördüğünüz gibi bağlantıyı aç-kapat işlemlerine ihtiyaç duymadık. Kod satırları çalıştığında sorgu işlemi yapılıp dönen değerler comboBox ta görüntülenecektir. Şimdi diğer yöntemimize bakalım.2. Yöntem- SqlDataReader
Bu yöntemde SqlDataReader nesnesi oluşturularak bu nesne üzerinden komutumuzu çalıştıracağız. Yalnız unutulmaması gereken nokta komut çalışırılmadan bağlantının açılması ve çalıştırıldıktan sonra ise bağlantının kapatılması gerektiğidir. Bunu bir kontrol yapısı altında yapacağız.
if (baglanti.State == ConnectionState.Closed)
baglanti.Open();
SqlDataReader dr = sql_cmd.ExecuteReader();
while (dr.Read())
{
comboBox1.Items.Add(dr["ogrenci_adi"]);
}
baglanti.Close();
Yukarıda görüldüğü gibi if yapısını kullanarak bahsettiğimiz bağlantı kontrolünü yaptık. Eğer bağlantımızın durumu kapalı ise baglanti.Open() metodu ile bağlantımız açılacak eğer zaten açık ise o satır atlanıp komut çalıştırılacak. Komut çalıştıktan sonra while döngüsü ile comboBox a ögrenci adlarını ekliyoruz ve ardından bağlantıyı kapatmayı unutmuyoruz.
Peki bunları yaptık comboBox a isimler listelendi fakat ben seçmek istediğim ismi listede aramak yerine comboBox a yazarak ilk harfleri girdikten itibaren otomatik arama yapmak istiyorsam naparım? Bu konuyla devam edecektim fakat yazının çok uzun olduğunu farkettim bu da bir sonraki yazımda saklı:) İyi çalışmalar...