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)

Javascript if ile gün saati uygulaması

JavaScript : Netscape Navigator 2.0 ile birlikte Brendan Eich tarafından geliştirilen ve önceleri Mocha daha sonra LiveScript olarak adlandırılan ve en sonunda şu anki adını alan JavaScript dili başlangıçta sadece istemci taraflı (client-side) yorumlanan bir betik programlama dilidir.(Kaynak :http://tr.wikipedia.org/wiki/JavaScript)

Javascript de sık kullanılan if yapısı ile gün içi uygulamamızı yapalım. Uygulamamızda; linke tıkladığımızda gün içindeki zamana göre selam vermesi istersek;

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
 <script language="javascript" type="text/javascript">
function ifuygulama() {
            var tarih = new Date();
            var saat = tarih.getHours();

            if (Saat >= 6 && Saat < 12) {
                alert("Günaydın");
            }
            else if (Saat >= 12 && Saat < 14) {
                alert("Tünaydın");
            }
            else if (Saat >= 14 && Saat < 18) {
                alert("İyi Günler");
            }
            else if (Saat >= 18 && Saat < 22) {
                alert("İyi Akşamlar");
            }
            else {
                alert("İyi Geceler");
            }
        }
 </script>

<body>
<a href="javascript:ifuygulama()">Selam ver</a><br />
 </body>

Buradaki işlem; yeni tarih tanımlayıp istenilen zaman değerlerine şart koyarak alert ile mesaj verdirmek.

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…

Stored Procedure ile koşullu kaydetme

Tablomuza oluşturacağımız Stored Procedure ile ürün ekleyebilir. Ancak bu ürün tabloya önceden eklenmiş ise hata verecek çalışmayacak. Bunu önlemek için ilk önce ürünün olup olmadığını kontrol edip sonra ürünün eklenmesini isteyebiliriz.

Northwind veritabanı üzerinde Categories tablosuna categoriname’e ürün ekleyelim;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE proc sp_kategoriyekaydet (@katadi nvarchar(30))
AS
BEGIN
IF EXISTS (SELECT * FROM categories WHERE categoryname =@katadi)
BEGIN
print 'kategori daha onceden eklenmiş'
END
ELSE
BEGIN
INSERT INTO categories (categoryname) VALUES (@katadi)
print 'kategori başarı ile kayıtedildi'
END

END

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

Stored Procedure uygulamaları

Stored Procedureler Sql ‘de işlemler bütününü çalıştırmak için derlenen özel sonuçlar üreten bileşenlerdir. Stored Procedure kullanım avantajları çoktur bunlardan birkaçı; tekrar tekrar kullanım olanağı sağlaması, birkaç sorguyu biranda sorgulama olanağı gibi kolaylık sağlamaktadır.

Stored Procedure oluşturmanın genel kullanımı şu şekildedir;

1
2
3
4
5
6
7
8
9
CREATE PROC procedureadi
AS
BEGIN
    sorgular
END

GO

EXEC procedureadi  -- oluşturulan procedure çalıştırmak için

Alttaki örnek Stored Procedure uygulamaları ile daha iyi anlaşılacağını umuyorum.

Ör.1 Aynı anda üç sorgu sonucu ekrana veren bir sp(Stored Procedure) yazalım; (Örneklerimiz Northwind üzerinden çalışmaktadır)

1
2
3
4
5
6
7
8
9
10
11
CREATE proc sp_ucsorgu
AS
BEGIN
SELECT * FROM Customers
SELECT * FROM Products
SELECT * FROM [ORDER Details]
END

GO

EXEC sp_ucsorgu

Ör.2 Products tablosundaki kategorisi sadece 5 olanları gösterme

1
2
3
4
5
6
7
8
9
CREATE proc sp_kategoriye (@katid INT)
AS
BEGIN
SELECT * FROM  Products WHERE CategoryID=@katid
END

GO

EXEC sp_kategoriye 5

Ör.3 Products tablosuna ürün eklemek

1
2
3
4
5
6
7
8
9
CREATE proc sp_urunukaydet (@urunadi nvarchar(20), @katid INT, @fiyat money, @stok INT)
AS
BEGIN
INSERT INTO Products (ProductName, CategoryID, UnitPrice, UnitsInStock) VALUES (@urunadi, @katid, @fiyat, @stok)
END

GO

EXEC sp_urunukaydet 'armut',23,5,12 -- armut kategoriid fiyatı ve stok miktarını virgüller ile ayırarak ekliyoruz.

Bu procedure ile birlikte exec sp_urunukaydet yazıp istediğimiz kadar ürün ekleyebiliriz.

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

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.)