Sql connection listview örneği


Ado.net yardımı ile c#’dan sql bağlanıp forma eklediğimiz listview veri bağlantı kurmak istersek;

Bundan önce yapılan bağlantımız Connected, yani her zaman bağlı kalan mimari ile bağlanacağımız için bu bağlantı şekli hakkında biraz açıklama yapalım; Connected ile veritabanımıza her zaman bağlı oluruz, böylece hangi verilerin değişiklik yapıldığını anlık öğrenebiliriz. Bu mimari ile veri çekebilmek için SqlCommand kullanılır ve SqlDataReader ile okunur.

Connected mimarisi ile yapılan bu örnekte, öncelikle resimdeki gibi forma bir buton ve birde listview(kolonları ve gridview ayarlamalarını yapıp) ekleyelim. Form ekranını hazırladıktan sonra butona çift tıklayıp kodlamaya geçebiliriz;(Database’imiz her zamanki gibi Northwind, bağlatıyı şu şekilde yapıyoruz; server=.; database=northwind; trusted_connection=true; )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SqlConnection sql = new SqlConnection("server=.; database=northwind; trusted_connection=true;"); // tekrar tekrar kullanmak için bağlatıyı global tanımladık
SqlCommand cmd; // bağlı işlemler  ve tekrar tekrar kullanmak için global tanımladık

private void btnbaglan_Click(object sender, EventArgs e)
{
cmd = new SqlCommand("select * from products", sql);
sql.Open();
SqlDataReader rdr = cmd.ExecuteReader(); // sql sorgusunu çalıştırmak için yapılan işlem, datareader bilgileri aktarmak için kullanırız, dataset'den daha hızlıdır
while (rdr.Read()) // while ile şarrtı sağlayana kadar döngü kurduk yani Products(ürünler) tablosunda ne kadar ürün varsa getirmesini istedik
{
ListViewItem li = new ListViewItem(); //listview tablosuna  ilgili kolonlardaki bilgileri ekliyoruz
li.Text = rdr["ProductID"].ToString();
li.SubItems.Add(rdr["ProductName"].ToString());
li.SubItems.Add(rdr["unitprice"].ToString());
li.SubItems.Add(rdr["UnitsInStock"].ToString());

listView1.Items.Add(li);
}

sql.Close();

}
  1. Tekrar tekrar kullanmak için sqlconnection bağlantısını global tanımladık
  2. SqlCommand cmd; bağlı işlemleri yapabilmek için tanımlanan bu komutu ve tekrar tekrar kullanmak için global tanımladık
  3. SqlDataReader rdr = cmd.ExecuteReader(); sql sorgusunu çalıştırmak için yapılan işlem, datareader bilgileri aktarmak için kullanırız, dataset’den daha hızlıdır
  4. while (rdr.Read()) while ile şartı sağlayana kadar döngü kurduk yani Products(ürünler) tablosunda ne kadar ürün varsa getirmesini istedik
  5. listview tablosuna  ilgili kolonlardaki bilgileri ekliyoruz
  6. Son olarak sql.Close(); ile açmış olduğumuz connection ı kapatıyoruz.

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

Csharp sql e bağlanma


Bazen C# üzerinden yapılan işlemleri, verileri tekrar kullanmak için bir yerlerde saklamamız gerekir. Bunun için veritabanına ihtiyaç duyulur. Bu veri tabanına bağlantı kurabilmek içinse bir kaç işlem yapılması gerekiyor. Güzelim hikayeyi daha fazla karıştırmadan direk mevzuya girmek istiyorum;

Form ekranına bir buton ve listbox ekleyelim, products tablosundan Productname kolonundaki isimleri listeleyelim. (Database Northwind)

İlk önce sqlbağlantısı kurabilmek için alttaki kütüphaneyi ekliyoruz.

1
using System.Data.SqlClient;

Button click inden girerek alttaki kodları yazıyoruz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SqlConnection cdr = new SqlConnection("Server=.; Database=Northwind; Trusted_Connection=True;");  //database e bağlantı kuruluyor
            SqlCommand cmd = new SqlCommand("select * from products", cdr); // bağlı işlemler

            cdr.Open(); // bağlantı için izin verildi

            SqlDataReader rdr = cmd.ExecuteReader(); //sql sorgusunu çalıştırmak için yapılan işlem


            while (rdr.Read())
            {
                listBox1.Items.Add(rdr["ProductName"]); // productname i getir
            }

            cdr.Close(); // bağlantıyı kapat

Gerekli açıklamaları kodlar içinde bulabilirsiniz…

Aöf vize final not hesaplayıcı

Anadolu Üniversitesi Açık Öğretim Fakülte öğrencisini daha çok ilgilendiren bir program ile merhaba. Hali hazırda Aöf Vize-Final not hesaplama programını buradan indirebilirsiniz.

Aöf vize-final not sistemi; 100 üzerinden alınan puanın, vizenin %30’u ile finalin %70′ nin toplamı 50 puanı geçmek koşulu ile dersden geçilebilmekte. Bundan dolayı uygulamamız vize notu olarak girilen değeri %30’unu alarak finalden alman gereken minimum not ve doğru cevaplanması gereken soru miktarını vermekte.

Kullanıcı tarafını atlattıktan sonra yazılımcı tarafından devam edelim. Bu mini not hesaplama uygulamasını C sharp ile yapabilmek için bir adet textbox, 3 adet buton, tasarımı biraz görselleştirmek için ise 2-3 adet timer. Form tasarımını resimdeki veya uygulamayı indirerek benzerini yaptıktan sonra kod kısmına geçebiliriz;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  private void Form1_Load(object sender, EventArgs e)
        {
            timer1.Start();
            dogru.Enabled = false;
            puan.Enabled = false;

        }
       
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                double vize;
                vize = Convert.ToDouble(textBox1.Text);
                double sonuc;
                double soru;
                if (vize <= 100)
                {
                   
                    sonuc = Math.Floor((50 - vize * 0.3) / 0.7);  // sonucu yuvarlamak için math.floor ve math celling fonksiyonunu kullandık
                    soru = Math.Ceiling(sonuc / 3.3);
                    label2.Text = sonuc.ToString();

                    label3.Text = soru.ToString();

                    dogru.Enabled = true;
                    puan.Enabled = true;
                }
                else
                {

                    MessageBox.Show("Hata!!! Lütfen Geçerli Bir Not Giriniz...");
                    textBox1.Clear();

                   
                    label2.Text = "--";
                    label3.Text = "--";
                    dogru.Enabled = false;
                    puan.Enabled = false;
                }
            }

            catch
            {
                MessageBox.Show("Hata!!!     \n\nLütfen Notunuzu Rakamsal Değer ile Girin\n\nÖrnek: " 65 " gibi... ");
                textBox1.Clear();
            }

           
        }

        private void button2_Click(object sender, EventArgs e)
        {

            timer2.Enabled = true;

            textBox1.Clear();
            label2.Text = "--";
            label3.Text = "--";
            dogru.Enabled = false;
            puan.Enabled = false;
        }

             

        private void button3_Click(object sender, EventArgs e)
        {
            Application.Exit();  //programdan çık
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Opacity += 0.10;
            this.Opacity = Opacity;
            if (Opacity > 1.0)
            {

                timer1.Enabled = false;

            }
        }
       
           
        private void timer2_Tick(object sender, EventArgs e)
        {
            if (timer2.Interval<101)
            {
                timer2.Interval+=20;


                int c = 0;
                Random r = new Random();
                Point l = this.Location;

                while (c < 50)
                {
                    int sag = r.Next(1, 5);
                    int sol = r.Next(1, 5);

                    this.Location = new Point(l.X + sag, l.Y + sol);

                    c++;
                }
                this.Location = l;
            }

   
                    else
                    {
                        timer2.Enabled = false;  // timer2 durdu
                        timer2.Interval = 10;
                    }




        }

Burada Math.Floor ve fonksiyonları ile alınan notu daha doğru yazdırabilmek için çıkan sonucu yuvarladık. Uygulama sonuç olarak button1_Click içerisinde yapılan kodlamalardan ibaret. Diğerleri opsiyonel olarak yapılmış görsel özellikleri.(formun yavaş yavaş açılması, form titremesi, temizleme vs.)

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

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;

1
2
3
4
5
6
7
8
9
10
11
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");

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;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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;

            }

açıklamaları kodların içinde bulabilirsiniz.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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;

            }
        }

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;

1
2
3
4
5
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
        }

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.

1
2
3
4
5
 private void saattarih_Tick(object sender, EventArgs e)
        {
            ltarih.Text = DateTime.Now.ToShortDateString();
            lzaman.Text = DateTime.Now.ToLongTimeString();
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
            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);
            }

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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        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
        }

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

1
2
3
4
5
6
7
8
9
10
11
12
        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ı");
            }
        }

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…