SQL CharIndex Kullanımı

Merhaba arkadaşlar;

SQL üzerinde çalışmalarımız devam ediyor. İlerde komplex procudereler yazarken bizlere lazım olabilecek elemanları yavaş yavaş oluşturmaya başladık.

Şimdi sıra CharIndex() kullanımında. Kullanımı çok basit olan CharIndex() adında anladıgımız gibi bir string ifade içinde başka bi string ifade aramak için ve index no yakalamak için kullanılır.

Hemen bir örnek verecek olursak

SELECT CharIndex('a','fatih')
Eğer aranan karakter( yada karakterler) bulunursa index no, bulunamazsa da 0 dönecektir.
Bu örneğe göre dönecek olan değerimiz dönecek olan değerimiz 2 dir.
(Eğer birden fazla yerde bulunursa ilk bulunan index dönecektir...)
C# VB.NET vs. diller tarafında butür indexlemeler 0 dan başlar ama SQL de direk 1 den başladıgını farketmişsinizdir. Yani bu işlemi .net tarafında karşılıgını yapmış olsaydık dönecek değer 1 oludu.
Biraz daha detaylı bir örnek verecek olursak

DECLARE @returnValue int

SELECT @returnValue=CHARINDEX('a','ADANA')
IF(@returnValue=0)
print 'Aranılan Karakteri içermiyor...'
ELSE
print 'Karakter Index='+ Convert(varchar(10),@returnValue)


SELECT PATINDEX('%T%','FATİH') <-- amaca="" ayn="" eder...="" hizmet="" span="">

Artık lazım olması durumunda nasıl kullanılacagını biliyoruz. Bir süre daha T-SQL üzerine gitmeyi planlanlıyorum.

Şimdilik hoşcakalın...

SQL Trigger (Tetikleyici) Kullanımı

Merhabalar;

T-SQL üzerine gitmeye devam ediyoruz.
Bugün ki konumuz TRIGGER kullanımı.

Sql de veri tutarlıgını sağlamak ve işlemleri otomatikleştirmek amacıyla kullanılan bir yapıdır Trigger.
Kelime anlamı Tetikleyici olan Trigger adına yakışır aynı güzellikde hareket etmektedir ataması yapılan tablodaki hareketleri takip ederek otomatik olarak çalışır.

Triggerler aslında Procudurelerin daha da fonksiyonelleştirilmiş halidir.
Ataması yapılan tabloda INSERT,DELETE,UPDATE olmak
üzere 3 farklı trigger kullanılabilir. SELECT işleminde kayıtlarda değişiklik olmadıgı için çalışmaz. Ayrıca Create, Alter, Drop işlemlerinde de çalışmaz.Bunların dışında View,Temp_table ler de de Trigger kullanılamaz.
Önemli husus daha var Triggerlere dışardan Parametre yollanamaz.


Tabloların maruz kaldıkları işlemlere göre trigerler geçici tablolar oluştururlar bunlar DELETE işlemi için DELETED, INSERT işlemi için INSERTED dir. Bunlar çalışma anında oluşturulur ve işlem biter bitmez silinir. Daha sonra oluşmanız münkün değildir. Burda UPDATE değinilmedigini biliyorum UPDATED diye bi tablomuz yok. Updateleri yakalamak için hem DELETED hemde INSERTED tablosundan faydalanacagız onun için ayrıca ögner yazacagım.

Aşagıda ki Trigerimizde STOK ve STOK2 adında 2 tablomuz var. Şuan için pek mantıklı bir işlemiş gibi görünsede STOK tablosundan sildigimiz kayıtları bir yerde saklama geregi duyabiliriz ve örnekler çogaltılabilir. İşde Trigerimizde bu amaca hizmet etmekte.



ALTER TRIGGER DENEME_TRIGGER --Trigerimiz tanımladık
ON STOK --hangi tabloda çalışacak

FOR DELETE
--hangi işlem için (FOR INSERT,DELETE,UPDATE aynı anda olabilir)AS

INSERT INTO STOK2 (KODU,ADI,BIRIMREF) SELECT KODU,ADI,BIRIMREF FROM DELETED

Giriş seviyesi için sanırım bu örnek yeterli daha sonra farklı örneklerle detaya inecegiz.

Şimdilik hoşcakalın...

C# Condition Kullanımı (?:)

Merhabalar;

Blogun tarzı geregi lafı çok uzatmak istemiyorum ama
bi kaç uyarı yapmadan da geçemeyecegim.

Geliştirdigimiz kodlarda asıl amaç çalışması olsada, zaman içinde gelişen ve kalabalıklaşan kod yıgınları için önceden önlemini alıp ona göre bir mimari oluşturmak gerekiyor. Bunun için mümkün oldugu kadar OOP tarafına kaymanızı tavsiye ederim.
OOP a gitmeden önce çok farkına varmadıgımız ve işi kolaylaştıran Condition kullanımından bahsedicem.

Önce kodlarımızı bir inceleyin sonra açıklamasını yapalım



Dönen sonuç 5, den büyük oldugu için dönen sonuç false olacaktır
Hemen açıklamasını yapalım
Burda yapılan işlem şu 5, 3 den büyük ise true, değilse false sonuç dönderecektir.

Condition kullanmadan bunu yapmış olsak kodlarımız aşagıda ki gibi olacaktı.

if (5<3 sonuc=" false;">sonuc =false;


Genel kullanım şekli şöyledir:

(deger) ? dorgu ise : Değilse

deger doğru ise ? den sonra ki kısım, değilse : den sonra ki kısım çalışacaktır.

Farklı bir örnek daha verelim sanırım böylece daha net anlaşılacak

string deger=null;
string str = String.IsNullOrEmpty(deger) ? "Boş" : "Dolu";
MessageBox.Show(str);

Evet işin detaylarına gittikce ufkumuzun genişledigini ve daha az satırlarla çalıştıgımızı farketmişsinizdir.
(blogspot un yapısı yüzünden if else bloklarını vs. veremedim herşeye html hatası veriyor buna ragmen)

Umarım keyfli olmuşdur.


C# Klasör İçini Temizleme

Merhablar zaman zaman klasörlerimizin içini temizleme ya da bazı dosyaları silme geregi duya biliriz.
İşde size çözüm yolu

İşe başlamadan önce

using System.IO; eklemeniz gerektigini biliyorsunuz.

FileInfo fileInfo;
string uzanti = ".txt";

foreach (string dosya in Directory.GetFiles(@"C:\TEST"))
{
fileInfo = new FileInfo(dosya);
if (fileInfo.Extension == uzanti)
// Dosya Uzantısı ve sizin uzantınız aynımı ??
{
fileInfo.Delete();
}
}

Peki ya klasörün kendini silmek istersek

Directory.Delete("klasör konumu");
bu komutun 2 overload ı vardır

1. Klasör boşsa siler
Directory.Delete(@"C:\TEST");

Silmeden önce içinde bişiler varmı kontrolünü yapabilirsiniz.

2. Klasör dolumu boşmu bakmadan siler
Directory.Delete(@"C:\TEST",true);
Tabi olaylar bu kadar değil sanırım bu konuda makelemiz yok en kısa sürede telafi edelim
Şimdilik hoşcakalın...

CURSOR KULLANIMI

Merhabalar Sql başlıca kullanılan işlemlerden biride Cursor ler dir.
Cursor ler kayıt kümesi üzerinde satır satır hareket etmemizi sağlar.
Nisbeten performans gerektiren bir işlem oldugundan dikkatli kullanılmasında fayda var.

Bu cursor blogunu herhangi procedure içinde rahatca kullanabiliriz.
Yaptıgı işlem ise bi tablodan çektigi verileri diger bi taboya insert yapıyor.

"ee zaten bunu cursor kullanmadan da yapabilirim hemde daha kısa ve kolay..." diyen arkadaşlarım olabilir, biliyoruz bunun çok çok faklı yollarıda var burda asıl amaç Cursor yazımını kavramak.

declare @code varchar(11)
declare @unvani nvarchar(50)

DECLARE DENEME_CURSOR CURSOR FOR -- cursor umuzu tanımlıyoruz
SELECT CODE, DEFINITION_ FROM CL

OPEN DENEME_CURSOR
--kullanıma açtık
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani

WHILE @@FETCH_STATUS<>-1
--kayıtlar üzerinde hareket etmeye başladıkBEGIN
insert into CLC Values(@code,@unvani)
--insert yapıyoruz...
FETCH NEXT FROM DENEME_CURSOR INTO @code, @unvani
END

CLOSE DENEME_CURSOR
-- işi biten cursor kapatılmalıDEALLOCATE DENEME_CURSOR --Bellekde haliyle yer kaplayacagı için cursor le ilgili herşeyi temizledik...
CURSOR kullanımı oldukca kolay ve keyflidir. Artık cursor mantıgını ve yazımını kavradıgımız için gerekli hallerde hemen devreye sokarak işlerimi halledebiliriz.

Bir süre daha T-SQL üzerine gidecegim. Adım adım ilerleyerek en sonlarında senaryolarla ögrendigimiz konuları pekiştirmeyi hedefliyorum.
Bir sonra ki yazmızda görüşmek üzere hoşçakalın...