17 Nisan 2010 Cumartesi

C# ile Sql'e Baglanma

Program yazarken veya -ileride gorecegiz- web uygulamasi yazarken bazi bilgilere ihtiyac duyacagiz. Cok siradan bir ornek vereyim. Bir site yaptik ve bu siteye uye girisi yapmadan erisemiyoruz. Iste o uyelerin kullanici adlarini, sifrelerini ... vs. gibi daha ne gerekli bilgi varsa, onlari icinde saklayan ve istedigimiz zaman da bize bir anne gibi sefkatli kollarini acip bu degerli bilgileri bizimle paylasan sql'e erisebilmemiz icin bir platformdur diyelim Ado.Net icin. Yine C# uzerinde calisacagiz ve yine C# kodlari yazacagiz. Tek fark sql'e baglanip, (aslinda basit mantikla query'e baglanip) gerekli kodlari yazip bilgileri cekmemizi, guncellememizi, silmemizi vs. gibi islemleri saglar. Simdi kisaca sql'e baglanma, sql'e komut yazdirmayi anlatacagim.

Oncelikle sql'e erisebilmemiz icin namespace'mizi ufak bir ekleme yapmamiz gerekecek. Bu ekleme ;

using System.Data.SqlClient;

Namespace'mizi de ekledigimize gore artik kimse mani olamaz sql'e varmamiza. Oncelikle baglantiyi saglayalim;

SqlConnection conn = new SqlConnection(@"integrated security=true;server=Ergin-PC\SQLExpress2005;database=OyunDB");

Ufak bir not, tirnaktan onceki @ isareti, server ismindeki '\' isaretine C#in hata vermesini engellemek icin konulan isarettir. veya '\\' yaparak da cozebiliriz tercih sizin.

Artik sql'e baglanti icin bi engel kalmadiysa cilginlar gibi sql komutu yazabiliriz.

SqlCommand cmd = new SqlCommand( "select count(*) from Oyun",conn);

Her sey hazir. Baglanti yolumuzu belirledik, sifre, isim sorunumuz yok. Satirimizi yazdik. Sadece birinin sql'i acmasi gerekiyor.

conn.Open();

An itibariyle Sql icerisindeyiz. Artik yukarida yazdigimiz sql komutuyla birlikte istedigimiz yere getirtebiliriz degerlerimizi.

SqlDataReader sdr = cmd.ExecuteReader();
while(sdr.Read())
{
lstOyun.Items.Add(sdr["Ad"]); // 0. kolonu gosterir.
}

-Listbox'in items'ina gelen degeri atiyoruz bu kodda. Birden fazla satir etkilendiginden SqlDataReader kullaniyoruz. Tek hucre etkilenseydi ExecuteScalar isimizi gorecekti. Eger bu islemlerden kac satirin etkilendigini ogrenmek istiyorsak ExecuteNonQuery yazmamiz gerekecekti.
-Kisaca while dongusunu anlatmak gerekirse de, debug esnasinda programimiz sdr.Read() ile karsilastiginda, yani bir alt satira gectiginde deger yoksa, yani 'false' gonderene kadar donguyu calistir demek oluyor.Bu ornekte diyelim ki 5 satir gelsin. ilk while'a girdi ilk satir yazildi, ikinci satira gecis sirasinda , sdr.Read()==true oldugundan while'i bir kere daha donduruyor, taa ki 5. satir bittiginde, sdr.Read()==false artik bizim icin ve donguden cikiyoruz.

Son olarak unutmayin, unutturmayin. Actigimiz ne varsa hepsini kapatiyoruz :)

sdr.Close();
conn.Close();
Kapatmasak nolur artislik yapma diyenler icin, programiniz burda sonlaniyorsa sorun olmaz, bosa sql calisir ama hata vermez. Lakin, eger bu satirdan daha sonra tekrar baska classlarda vs. conn.open derseniz cort olur, kodunuz patlar. Bosa sql'e zulum etmemek adina isiniz bitince kapatiniz, nasil gormek istiyorsaniz oyle birakiniz.

0 yorum: