29 Kasım 2010 Pazartesi

Sql'de Cursor(İmleç) Kullanımı

Gün gelir ki şöyle bir senaryoyla karşılaşabiliriz. Var olan bir tablodaki kayıtların içinde döngüyle dönüp, bazı verileri çekmeniz istenebilir :) Ne yapacaksınız bu durumda, cevabımız çok basit. Örnek üzerinden anlatınca, oldukça anlaşılır olacak.

Senaryomuz şöyle olsun, Table_1 isimli tablomuzdaki pr kolonundaki kayıtlarda teker teker dönüp, ssPromoCode tablosundaki kolonlardan birine ekleyelim. Bunun için düşünmemiz gereken çözüm, Table_1 tablosundaki pr kolonunda kayıt kayıt gezip, her kaydı ssPromoCode tablosuna eklemek olacak. İşte burada Cursor kavramı devreye girecek.

Kısaca kullanılışı;

declare @code nvarchar(10)
declare dongu cursor for --dongumuzu tanımlıyoruz
select pr from Table_1 --pr kolonundaki tüm kayıtları getiriyoruz
open dongu --dongumuzu açalım
fetch next from dongu into @code --ilk kayıt
while @@FETCH_STATUS=0 --döngü sonlanmadıkça, veri gelişi bitmedikçe döngü devam edecek
begin
insert into Urunler(Pr,Pr_OK,Pr_Dt,Pr_Total)
values
(@code,1,GETDATE(),,100)
fetch next from dongu into @code --bir sonraki kaydı getirir
end
close dongu--dongumuzu kapatırız.
deallocate dongu--dongumuzu tamamen bellekten sileriz

28 Kasım 2010 Pazar

Ref ve Out Anahtar Sozcukleri

C#'ta pek sık kullanılmayan ama gerektigi zaman da hayat kurtarabilecek oneme sahip anahtar sozcukleridir. Kisaca ne ise yaradiklarini ve nasil kullanildiklarini anlatmaya calisacagim.

ref: Metotlara deger yerine referansini parametre gecmek icin kullanilir.

public int Test(ref int p)
{
return p=5;
}

int a=3;
int a=Test(ref p);

ile a'yi 5 elde ederiz.

out: ref ile ayni kullanima sahiptir.

public int Test(out int p)
{
return p=5;
}

int a=3;
int a=Test(out p);

Aralarindaki tek fark, out ile parametrede sadece yazma islemi kullanabilirken, ref ile hem yazma hem okuma secenegine sahip oluruz. Yani;

public int Test(out int p)
{
p=p+5; // burada hata verecektir. okuma islemi yapilamaz
return p;
}

public int Test2(ref int p)
{
p=p+5; //burada hata vermeyecektir, cunku ref anahtar sozcugu bize okuma imkani da taniyacaktir
return p;
}

17 Kasım 2010 Çarşamba

GridView Kontrolu

Repeater ve DataList 'ten farkli olarak, bir diger veri getirme kontrolu de GridView'dir. Digerlerinden farkli olarak bize daha cok fonksiyonellik getirir. Verileri siralamak(sorting), sayfalama(paging), verilerde update, delete, edit, insert islemlerini bize kolayca saglamamiza olanak tanir. Gordugunuz uzere diger veri kontrollerine gore daha islevseldir, fakat ozellikle css yedirirken vs. ufak tefek problemler cikarabiliyor bize. Simdi kisaca GridView'den bahsedelim.

GridView'in de DataList gibi yine uzerinde smart tagi bulunmaktadir. Buradan GridView'in icinde hazir yazilmis cssleri kullanabilir(autoformat), veri kaynagi verebilir, yeni kolonlar girip, var olan kolonlarda degisiklik yapabiliriz.

Buraya kadar her sey normal ilerliyor. Asil yapilacak islemler veri eklettikten sonra onumuze cikiyor. Rastgele bir database uzerinden veri baglayalim ve farki hissedelim.

Gordugunuz uzere veriler baglandiktan sonra, smarttagimizde ekstra ozellikler cikmakta. Ustte yazdiklarima ek olarak kolonlarda ekleme, degistirme islemleri yapabilir, paging,sorting,editing,deleting ve selection islemleri yapabilmekteyiz. Ve bunlari yaparken de kod yazmamiz gerekmeyecek, otomatik olarak arkada yazilmis kodlar kullanilacak ve biz bu islemleri yapabilecegiz. Tabi ki ornegin delete,edit islemlerinde veritabaniyla iliskiyi biz kuracagiz yine. Sadece gorunum olarak hazir geliyor bize islemler.

Source'u actigimiz zaman da GridView ile ilgili bazi kodlarin yazildigini goruyoruz. Bazi durumlarda, el ile bazi islemleri halletmekte zorluk cekebiliriz, o yuzden bazi template ozelliklerini, yazimini vs. buradan belirtecegim. Bu durumda GridView uzerinde yapamayacagimiz islem kalmayacak.

Oncelikle, BoundField ile karsilasacagiz source kodlarimizi incelersek. BoundField bize database uzerinden getirilen her bir kolondaki veri icin degisiklik veya grid'e baglamak konusunda bize kolaylik saglar. ItemTemplate'lerimiz sayesinde veritabanindan gelen tablodaki kolonlar uzerinde oynamamizi saglar. Kolon basligini degistirme, grid uzerinde belli bir noktada gosterme, yazi tipleri buyuklukleri vs. gibi konularda fiziksel degisim imkani tanir bize. Yine diger kontrollerde oldugu gibi GridView'da da ItemTemplate,FooterTemplate,HeaderTemplate, EditItemTemplate ..vs. gibi templateler bulunmaktadir. Onlari tekrar yazmayacagim, DataList ve Repeater makalelerinden ayrintili inceleyebilirsiniz. Ayrica Grid uzerinden update, insert, delete gibi islemlerinin nasil yapildigini da daha once yazdigim makalemden ulasabilirsiniz.