Coder

31 Ocak 2011

Sql transaction

Bir banka örneği ile konuyu duygusal($) yoldan bağlayalım. Örneğimiz, bir bankadaki iki hesap arasındaki para transferi. Öncelikle banka hesabı için bir abank isimli tablo oluşturalım. Sadece müşteriid ve hesap sutunları olması yeterli.

[cc lang="sql"]create table abank
(
musteriid int primary key identity(1,1),

hesap int
)[/cc]

Şimdi de tablomuz daki hesaplara biraz para yatıralım;
[cc lang="sql"]insert into abank values(1500)
insert into abank values(1500)[/cc]

Ve şimdi transaction için bir Stored procedure oluşturalım;
[cc lang="sql"]create proc sp_havaleyaps (@gonderici int, @alici int, @miktar int)
as
begin
begin tran
update abank set hesap +=@miktar where musteriid = @alici
update abank set hesap -=@miktar where musteriid = @gonderici
commit tran
end[/cc]

Kodları açıklayacak olursak; begin tran(tran transaction kısaltılması, genelde böyle kullanılıyor) ile transaction’ını başlattık. Tablodaki hesaplardan rastgele alıcı ve göndericiyi seçerek birinden diğerine update komutu ile para transferi yani birinden azaltıp diğerini aynı miktarda arttırdık. commit tran ile transaction’nı sonlandırdık yani tamamladık.

Şimdi de oluşturduğumuz procedure çalıştıralım(musteriid 3 olandan, 4 olana 60 lira transfer ediliyor). Ve yapılan transferi görelim.
[cc lang="sql"]select * from abank

exec sp_havaleyaps 3,4,60[/cc]

Kaynak : Cemal Can AKGÜL (Bilge Adam Yazılım Eğitmeni)

Sql BCP komutları

Filed under: Sql — Etiketler:, , , , — Murat M.oğlu @ 20:00

BCP, Sql Server üzerinden veri dosyası transfer etmek için kullanılır. Kullanımı dos ekranı üzerinden (çalıştır’a cmd yazıp açılan ekran) bcp yazıp temel kullanım şekline bakabilirsiniz.


İçerisindeki out, queryout, in ve format komutları;
in ; Dosyadan tabloya transfer etmek için kullanılır.
out ; Tabloyu dosyaya transfer etmek için kullanılır.
queryout ; Sorgu sonucunun veri dosyasına transfer etmek için kullanılır.
format ; Tabloya uygun formatta dosya oluşturur.

Veriyi dışarı aktarma, içeri aktarma ve queryout örnekleri;

Dışarı aktarma
[cc lang="sql"]
bcp Northwind.dbo.Products out c:\deneme.txt -T -c -t * -r \n[/cc]

deneme isimli txt dosyasına products tablosundaki veriler dışarı aktarıldı.

İçeri aktarma
[cc lang="sql"]bcp Northwind.dbo.Products in c:\deneme.txt -T -c -t * -r \n [/cc]

c’deki deneme.txt dosyasındaki verileri products tablosuna aktarıldı.

queryout örneği
[cc lang="sql"]bcp “SELECT p.ProductID, p.ProductName, c.CategoryName FROM Northwind.dbo.Products p JOIN Northwind.dbo.Categories c ON c.CategoryID = p.CategoryID” queryout c:\deneme.bcp -T -c -r \n -t “|” -C 1254[/cc]

Products tablosundaki ProductID, ProductName, CategoryName verilerini c’de deneme.bcp dosyasına transfer edildi.

30 Ocak 2011

Sayının basamak sayısını öğrenme

Filed under: C# — Etiketler:, , — Murat M.oğlu @ 23:14

C# While döngüsü örneği ile merhaba. Kullanıcı tarafından girilen bir sayının kaç basamaklı olduğunu bulmak için while döngüsünü kullanarak yapabiliriz.

Forma bir textbox ve bir buton ekleyip, buton click’ine;

[cc lang="c#"]int sayi = Convert.ToInt32(textBox1.Text); // textbox taki değeri sayıya atadık
int basamak=0;

while (sayi > 0)
{
basamak++;
sayi /= 10; //sayının değeri 10′a bölünüp kendisine eşitlenir. Sonuç 0 oluncaya kadar ne kadar bölürseni o kadar basam sayısı çıkar
}

MessageBox.Show(“girilen sayı ” + basamak.ToString() + ” basamaklıdır”);[/cc]

While döngüsünün amacı koşul sağlanana kadar döngü çalıştırmasıdır. Buradaki olay döngünün kaç kere çalıştırıldığı dır. Uygulamamızda girilen değer 0 olana kadar döngü çalışıp, döngü sayısını messagebox yardımı kullanıcıya gösterdk.

Rastgele sayı ve harf üreteci

Basit C sharp Captcha uygulaması ile merhaba. Bazı web sitelerinde, üyelik formlarında rastgele harf-rakam gösterilerek formu dolduran kişiden bu harf-rakam üzerinde yazan sözcüğü girmesi istenir. Buradaki amaç formu dolduranın insan olduğunu anlamak. Bu açıklamadan sonra 4 haneli karışık rastgele sayı ve harf üretecine geçebiliriz.

Metot kullanarak yapılan bu uygulamada bir buton ve bir label kullandık. Forma resimdeki gibi ekleyip kod kısmına geçelim. Buton click ine tıklamadan metot tanımlayın;

[cc lang="c#"]private void button1_Click(object sender, EventArgs e)
{
this.Text = sayideger(); //formun çubuğuna yazdırıyoruz
label1.Text = sayideger();
}

string sayideger()
{
string deger=”"; //boş değer tanımlıyoruz
Random rnd=new Random(); // rastgele değeri tanımlıyouz
for (int i = 0; i < 4; i++) //4 haneli rakam-harf üretmek için döngü sağlıyoruz { int karar=rnd.Next(0,2); // 0 veya 1 if (karar == 0) // rastgele üretilen sayı 0 ise sayı üret { int sayi = rnd.Next(1, 10); deger += sayi.ToString(); } else // değilse harf üret (65 ile 91 arası ascii kodlar olduğu için rakam değerleri girdik) { int x = rnd.Next(65, 91); char harf = Convert.ToChar(x); //ascii kod olarak üretilen sayıyı harfe çevirdik deger += harf; //değere atadık } } return deger; }[/cc] açıklamaları kodların içinde bulabilirsiniz.

27 Ocak 2011

Zamanlı işlem yaptırma

(Not : Bu programı çalıştırabilmeniz için bir önceki yazıyı okumanız gerekir. !!!)

C#’da bir önceki alarm uygulamasını bir adım daha ileri götürerek girilen, istenilen zamanda; bilgisayarı kapatma, yeniden başlatma, oturum kapatma, hazırda bekletme veya mesaj veren uygulama haline getirelim. Ayrıca Csharp’da basit kontrollü alarm örneğinde uygulamadığımız ses dosyası çalmasını da ekleyelim.

Aynı veya yeni bir form üzerine önceki yazıda istenilen form parçaları ile birlikte 5 adet radiobuton, bir tane checkbox, sağ alt köşede girilen notu zamanında mesaj olarak, baloncuk halinde verebilmesi için bir adet notifyicon ve son olarak multiline özelliği aktif edilmiş textbox(textbox üzerine tıklayarak multiline özelliği aktif edebilirsiniz).

Kodlamaya geçmeden önce bir önceki örnekte uygulamada alarm sesi yoktu, ama bunda var. C#’da ses dosyası oynatabilmek için kodlama kısmındaki en üste bulunan kütüphanelere
using System.Media;
şeklinde ses namespace’i ekliyoruz.(Bu namespace eklenmez ise uygulamadaki ses dosyası çalışmaz program hata verir) Ses dosyasını program çalıştığı zaman her defasında import etmemesi için resimdeki gibi Solution Explorer‘den Properties dosyası altındaki Resources.resx sağ tıklayıp Open, ardından çıkan sayfada üst taraftaki Add Resource‘a tıklayıp ses dosyasını ekleyin.

Bunları yaptıktan sonra kodlamaya atlayabiliriz. Bir önceki uygulama üzerinden devam ettiğim için talarmkur timer’ına çift tıklayıp kodları alttaki gibi uygulayın

[cc lang="c#"]private void talarmkur_Tick(object sender, EventArgs e)
{
simdi = DateTime.Now;
if (simdi.ToString() == alarmzamani.ToString())
{

if (bilgisayarikapat.Checked) //bilgisayarı kapat butonu seçili ise
{
System.Diagnostics.Process.Start(“shutdown”, “-s -f -t 0″); // bilgisayarı kapatma komutu
}
else if (oturumkapat.Checked)
{
System.Diagnostics.Process.Start(“shutdown”, “-l -f”); //oturumu kapatma kodları
}
else if (yenidenb.Checked)
{
System.Diagnostics.Process.Start(“shutdown”, “-r -f -t 0″); //bilgisayarı yeniden başlatmak için
}
else if (hazirda.Checked)
{
System.Diagnostics.Process.Start(“shutdown”, “-h -f”); // bilgisayarı hazırda beklet
}

else if (notyaz.Checked)
{
try //alarm sesi çalmasında olası hata için try catch denetimini ekledik
{
SoundPlayer sp = new SoundPlayer(Properties.Resources.alarm_sesi); //alarm için değer oluşturuldu
if (alarmcal.Checked)
{
sp.PlayLooping();
}
}

catch
{
MessageBox.Show(“Ses dosyasında hata oluştu”);
}
string notd= notyeri.Text; // yazılan notu string değişkenine atadık
notifyIcon1.BalloonTipTitle = “Bir Not Var !!!”; //sağ alt köşede çıkan baloncuk başlığı
notifyIcon1.BalloonTipText = alarmzamani.ToString() + ” Tarihindeki Zamanlanmış Notunuz : \n\n” + notd; // ayarlanan tarihi ve yazılan notu baloncukta gösterecek
notifyIcon1.ShowBalloonTip(5000); //5 saniye balon not gözükecek

}

else
{
MessageBox.Show(“Beklenmedik bir hata oluşuverdi. \n Programı kapatıp tekrar deneyin!!!”);

}
talarmkur.Enabled = false;

}
}[/cc]

açıklamaları kod kısmında görebilirsiniz. Program çalıştığında sağ alt köşede baloncuk mesajını verebilmek için eklenen Notifyicon kontrolünün properties’den icon kısmından bir resim ikon ekleyin.

Alarm sesini durdurabilmek için ise, Durdur(btndurdur) butonuna şimdilik şunları yazmanız yeterli;

[cc lang="c#"]SoundPlayer sp = new SoundPlayer(Properties.Resources.alarm_sesi); //sesi durdurabilmek için tekrardan aynı değeri oluşturduk
private void btndurdur_Click(object sender, EventArgs e)
{
sp.Stop(); //sesi durdur
}
[/cc]

26 Ocak 2011

Csharp’da basit kontrollü alarm

Bir önceki yazıda(Bugünün tarihi ve saati gösterme) uygulamasını biraz daha ileri götürerek; kullanıcın girdiği tarih ve saati kontrol edip eşitlendiğine alarm tarzı mesaj çıkaran uygulama ile merhaba.

Forma, resimdeki gibi bileşenleri ekleyelim. Bunlar; bugünün tarihi ve saati göstermek için 2 adet label ve bir tane timer nesnesi. Kullanıcıdan zaman verileri almak için; bir adet datetimepicker, 3 adet textbox, 2 adet buton ve alarmı kurmak için timer(formda bununla birlikte iki adet timer nesnesi oluyor).

Kod kısmına geçmeden önce başlıkta kontrollü yazmanın sebebini açıklayayım. Kontrollü, yani kullanıcın olası mantık ve giriş hatlarına karşı düzenlenmiş olduğu için yazdım. Örneğin kullanıcı eski bir tarihi girmiş olabilir, eski tarih girdiğinden dolayı alarm hiçbir zaman çalışmaz. Bundan dolayı kontrolleri ile yazmak istedim. Kod kısmında deneyerek ne demek istediğimi anlayacağınız umuyorum.

[cc lang="c#"] private void saattarih_Tick(object sender, EventArgs e)
{
ltarih.Text = DateTime.Now.ToShortDateString();
lzaman.Text = DateTime.Now.ToLongTimeString();
}

[/cc]
Bugünün tarihi ve saati gösterme uygulamasında kileri burada tekrar yaptık.

[cc lang="c#"]
int saat = 0;
int dakika = 0;
int saniye = 0;
private void btnayarla_Click(object sender, EventArgs e)
{
if (txtsaat.Text == “” | txtdakika.Text == “” | txtsaniye.Text == “”) // Saat veya dakika veya saniye boş bırakılmayacak
{
MessageBox.Show(“Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma”);
return;
}

try //uygulamanın olsaı hatada kitlenmemesi için try catch ile girilen değerleri kontrol ettik
{
saat = Convert.ToInt32(txtsaat.Text);
dakika = Convert.ToInt32(txtdakika.Text);
saniye = Convert.ToInt32(txtsaniye.Text);

}

catch
{
MessageBox.Show(“Girilen değerleri kontrol et \n Alanlardan herhangi birini boş bırakma”);
}

if (23 < saat | -1 > saat) // saati 23 ile -1 arasına değerlerin girmesi şartı sağladık
{
MessageBox.Show(“Doğru saati girin!!!”);
return;
}
else if (59 < dakika | -1 > dakika) // dakikayı saat gibi aynı şekilde şartı sağlattırdık
{
MessageBox.Show(“Doğru dakikayı girin!!!”);
return;
}
else if (59 < saniye | -1 > saniye) // saniyeyi saat gibi aynı şekilde şartı sağlattırdık
{
MessageBox.Show(“Doğru saniyeyi girin!!!”);
return;
}

alarmayar(dateTimePicker1.Value.Date);
}

[/cc]
Burada saat, dakika ve saniye kontrollerini gerçekleştirdik. Kullanıcı hatalarına karşı uyarı mesajları sağladık. Try catch ile int değer almak için hata denetimi yaptırdık.

[cc lang="c#"]
DateTime alarmzamani; //değişken tanımladık
private void alarmayar(DateTime zaman) //alarm ayarı için metot kullandık
{

alarmzamani = zaman; //saat dakika ve saniyeyi alarmzamani zaman değişkenine atıyoruz
alarmzamani = alarmzamani.AddHours(saat);
alarmzamani = alarmzamani.AddMinutes(dakika);
alarmzamani = alarmzamani.AddSeconds(saniye);

if (DateTime.Now > alarmzamani) //alarmı eski zamana kurdurma!
{
MessageBox.Show(“Geçmiş zamana alarm kuramazsınız !!!”);
return;
}

talarmkur.Enabled = true; //alarm timer’ını aktif hale geitriyoruz
}
[/cc]

Burada metot kullanarak girilen saat, dakika, saniyeyi alarmzamani değişkenine atayarak eski tarih girilmemesi için kontrol sağladık.

[cc lang="c#"]

DateTime simdi;
private void talarmkur_Tick(object sender, EventArgs e)
{
simdi = DateTime.Now;

if (simdi.ToString() == alarmzamani.ToString())
{
talarmkur.Enabled = false;
MessageBox.Show(“Alarm Zamanı”);
}
}
[/cc]

Son olarak da alarm için eklediğimiz timer nesnemi de simdi zaman değişkeni atayarak girilen değer ile karşılaştırma yaptık. Timer 1 saniyede bir çalışacağı için her saniyede bu döngüyü kontrol edecek girilen zamana geldiğinde ise messagebox ile “Alarm Zamanı” mesajını verecek(ses dosyası ekleyerek zil sesi çaldıra bilirsiniz).

Gerekli açıklamaları kod içinde bulabilirsiniz. Daha fazlasına ihtiyacınız olursa yorum yazmanız yeterli…

24 Ocak 2011

Bugünün tarihi ve saati gösterme

C#’da bugünkü tarihi ve zamanı, saat dakika saniye cinsinden göstermek için kullanmamız gereken; 2 adet label ve bir tane timer.


Resimdeki gibi forma 2 tane label ve bir tane timer ekliyoruz. Uygulama çalıştığı anda gösterebilmesi için Timer’ın enable’nı true yapıyoruz. Ardından timer’a çift tıklayıp tick’ine alttaki gibi label’ları tarih ve zamana eşitliyoruz;

[cc lang="c#"] private void saattarih_Tick(object sender, EventArgs e)
{
ltarih.Text = DateTime.Now.ToShortDateString();
lzaman.Text = DateTime.Now.ToLongTimeString();
}
}[/cc]

işlem bu kadar…

20 Ocak 2011

Kayıt silme Delete

Filed under: Sql — Etiketler:, , , — Murat M.oğlu @ 22:04

Veri tabanından bir kayıtı silmek için Delete komutunu kullanırız. Delete, tablo içindeki verileri siler, burada Delete’i Drop ile karıştırılmaması gerekir.

Ör. tablom adlı tablomuz daki tüm kayıtları silelim;

[cc lang="sql"]Delete from tablom[/cc]

Türü hikaye olan tüm kitapları silmek için,

[cc lang="sql"]Delete from tablom where kitapturu=’hikaye’[/cc]

Older Posts »

Powered by WordPress