access etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
access etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23 Mart 2013 Cumartesi

Veritabanı - 3... DataGridview Kullanımı...


Veritabanı  - 1 dersin de kullanmış olduğumuz okul isimli access dosyası üzerinden yine bir uygulama yapacağız... Bunun için aşağıdaki formu tasarlayalım... Bu sayfaya bir adet  Tools penceresindeki Data kısmından datagridview eklemeyi de unutmayalım...

Kodlarımızı yine ara butonunun içerisine yazacağız... Aşağıdaki örnekte formun hemen girişinde veritabanında ki verileri alıp, datagirdview içerisinde gösteriyoruz... Bu kısmı sağlamak için formun load kısmına ilk kodlarımızı yazıyoruz... 

Önemli bir ayrıntıda access veri tabanında ki alanların hangi veri türü ile tanımlandığıdır... Burada aramayı No isimli alan adına göre yapacağız ve hatırlanacağı gibi bu alan adı sayı olarak tanımlanmıştı... 

Sayı olarak tanımlanan alanlarda SQL sorgusu yaparken ' işaretleri kullanılmamaktadır... Örnek: 
"SELECT * FROM ogrenci WHERE [No] = 12"

Halbuki metin olsaydı bu kısım sorgulama şu şekilde olmalıydı...
"SELECT * FROM ogrenci WHERE [No] = '12' "


Gördüğünüz gibi aradaki tek fark tırnaklardır... Bu sebeple sorgumuzu yaparken numaranın alındığı kısımda şöyle bir sorgu cümlesi yazılmıştır... Buraya textbox1 i nasıl eklediğimiz ile ilgili sıkıntılarınız varsa veritabanı 2 dersine bakınız... Ama şunu unutmayalım SQL komutlarının haricinde bir form nesnesi eklenecek ise " " işaretleri arasında verilir ve + + işaretleri ile eklenir... Aşağıdaki  örnekteki gibi form nesnesinden sonra SQL'e geri dönülmeyecek ve kod yazılmayacak ise " + işaretleri yeterli olacaktır...

komut.CommandText = "SELECT * FROM ogrenci WHERE [No] =" + textBox1.Text;

Örnek olması ve konunun tam anlaşılması için söylüyorum... Belki de biraz uzatıyorum... Buradaki No isimli alanın veri türü metin olsaydı SQL cümleciğimiz aşağıdaki gibi olmak zorundaydı... 

komut.CommandText = "SELECT * FROM ogrenci WHERE [No] = ' " + textBox1.Text + " ' ";

Programın çalışmasındaki ekran görüntüleri ise aşağıdaki gibi olacaktır... İlk açılış aşağıdaki ekrandaki gibidir..


Numara girilip ara butonuna basıldığında ise aşağıdaki ekran gelmiş olacaktır... 

Programın kodları ise aşağıdaki gibidir... Yanlarında gerekli görülen yerlerde açıklama satırları eklenmiştir... 


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace arama_3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ÖRNEK - 3 : GİRİLEN NUMARA BİLGİSİ DATAGRİDVİEW YARDIMI İLE VERİTABANINDA GÖSTERİLİYOR...

        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source= okul.mdb");
        OleDbCommand komut = new OleDbCommand();
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        /*DataSet; SQLDataAdapter veya OleDbDataAdapter nesnesinden gelen kayıtları çevrimdışı depolamak ve 
         * yönetmek için kullanılan sınıftır. DataSet tüm veri sağlayıcı sınıflar için ortaktır.
         * 
         * OleDbDataAdapter; Access veya diğer veritabanlarından çekilen verileri ilgili veritabanına
         * aktarmak için kullanılan sınıftır...
         */

        private void Form1_Load(object sender, EventArgs e)
        {
            komut.CommandText = "SELECT *  FROM ogrenci";
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);         // DataAdapter'e bilgiler alınıyor...
            da.Fill(ds, "tablo");                     // DataSet'e bilgiler "tablo" ismi ile dolduruluyor...
            dataGridView1.DataSource = ds;            // Dataset gridview'e bağlanıyor...
            dataGridView1.DataMember = "tablo";       // GridView e Dataset'teki bilgiler aktarılıyor...
        }

        private void button1_Click(object sender, EventArgs e)
        {
            /*Numaraya göre arama yapılıyor...
             * SQL komut cümleceğinde alan adında türkçe karakterler varsa [ ] ifadelerini kullanmamız lazım...
             * "SELECT * FROM ogrenci WHERE [No] = 12" olacak olan cümlede, " işaretinden sonra + işaretinden sonra 
             * kontrol nesnesi getiriliyor ...
             */
            komut.CommandText = "SELECT * FROM ogrenci WHERE [No] =" + textBox1.Text;
            komut.Connection = baglanti;
            
            da = new OleDbDataAdapter(komut);
            ds = new DataSet();
            da.Fill(ds, "tablo");
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "tablo";
        }
    }
}

17 Mart 2013 Pazar

Veritabanı - 2... Combobox Kullanarak Alan Seçimi İle Aratma Yapmak...


Veritabanı  - 1 dersin de kullanmış olduğumuz okul isimli access dosyası üzerinden yine bir uygulama yapacağız... Bunun için aşağıdaki form tasarımını sağlayın... Bu sefer ki amacımız comboboxtan seçilen alan adına göre aratma yapmak ve yine bilgileri ekrana getirmek... 


Seçim alanı için kullanacağımız combobox ın içeriğini, üzerindeki ok işaretine tıklayarak edit items kısmına alan isimlerini sırası ile giriyoruz... Aşağıdaki gibi olacaktır.. Buraya gireceğimiz alan isimleri ile okul dosyamızdaki alan isimleri birebir aynı olmaz ise çalışmamız hata verecektir... 


Programımız çalıştığı zaman aşağıdaki gibi bir görüntü olacaktır... 

SQL ifadesi içerisinde form elamanlarını kullanmak istediğimiz zaman önce " karakteri ile SQL ifadesinden çıkıyoruz... Sonra aralarında bağlantı olması için aynı console.write komutundaki gibi + karakterini koyup form elamanımızı yazıyoruz... Nasıl SQL ifadesinden çıktıysak aynı mantıkla geri dönüyoruz... Önce +, sonra ise " karakterlerini yerleştirip SQL ifadesine devam ediyoruz... 

Aslına bakarsanız Console.Write komutunda değişkenleri kullanmak ile aynı mantık... 

Aşağıdaki örnekte alan isimleri combobox1 den gelmektedir... Alan isimlerinde Türkçe karakter veya boşluk ifadeler kullanıyorsanız [] karakterleri arasında alan isimlerini çağırın... Örneğin [Isim] veya [Ad Soyad] gibi... Bu şekilde olunca alan ismi olduğu anlaşılır ve program devam eder... Biz buradaki örnekte alan isimlerini Combobox1 de tuttuğumuz için ["+combobox1.text+"] komutunu kullandık... 


Programımızın kodları ise aşağıdaki gibi olacaktır...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;  // Veritabanı için OLEDB kütüphanesini açıyoruz...

namespace arama_2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //ÖRNEK - 2:  COMBOBOX İLE SEÇİLEN ALAN ADINA GÖRE, 
        // TEXTBOX'A GİRİLEN DEĞER ARANIYOR ve TEXTLERDE BİLGİLER GÖSTERİLİYOR...
         
        // Bu kısımda tanımlama database bağlantısı yapılınca bütün alt programlarda kullanılabiliyor...
        // Database bağlantısını yapıyoruz ve SQL komut nesnesini tanımlıyoruz...
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=okul.mdb");
        OleDbCommand komut = new OleDbCommand();
        
        private void button1_Click(object sender, EventArgs e)
        {
            // Veritabanını açıyoruz... 
            baglanti.Open();

            /*Like komutu belirlenen alan adına göre verilen değerleri araştırır... Kaç adet bulunursa hepsini gösterir...
             * Combobox'ta seçmiş olduğumuz alan adına göre arama yaptırılıyor... Sadece o alanda bulunan hücrelere
             * bakılarak, Textbox'da bulunan değer aranıyor... Burada bulunan karakterler çok önemlidir... 
             * SQL komutlarının haricinde bir ifade eklenecek ise " " işaretleri arasında verilir ve + + işaretleri ile eklenir...
             */
            komut.CommandText = "SELECT * FROM ogrenci WHERE  [" + comboBox1.Text + "] Like '%" 
                + textBox1.Text + "%'";
            komut.Connection = baglanti;

            OleDbDataReader oku = komut.ExecuteReader(); //Aldığımız bilgilerimizi depomuza atıyoruz...
            while (oku.Read()) // Sonuna kadar okutma yapıyoruz...  Aynı olduğu anda textlere değerleri yazıdıyoruz...
            {
                textBox2.Text = oku[0].ToString();
                textBox3.Text = oku[1].ToString();
                textBox4.Text = oku[2].ToString();
                textBox5.Text = oku[3].ToString();
            }

            oku.Close();         // Depo değişkenimizi ve veritabanımızı kapatıyoruz...
            baglanti.Close(); 
        }
    }
}

Veritabanı - 1... Textbox a Girilen İsmi Veritabanında Aratmak...


Veritabanı ile ilgili temel derslere geçiyoruz... Aşağı yukarı burada göstereceğim dersler deki komutlar temel bütün veritabanı işlemlerini yapmanızı sağlayacaktır... Temel işlem dediğimiz nelerdir... Kayıtlar üzerinde arama, ekleme, silme, güncelleme, listeleme gibi işlemlerdir... Biz bütün işlemlerde access veritabanını kullanacağız... Öğrencilerin ulaşması daha kolay olduğu için tercih edeceğiz... 

Temel seviyede access bilginizin olduğunu varsayarak uygulamaları anlatacağım... Yine aynı şekilde veritabanları üzerinde sorgulama işlemlerini yaptığımız SQL komutları hakkında da temel seviyede bilgi sahibi olduğunuzu varsayıyorum... Bunlar hakkında bilginiz yoksa öncelikle bu eksikleri kapatmanız da fayda olacaktır... 

İlk olarak Access veritabanında aşağıdaki gibi tasarım kısmında veri türlerini belirliyoruz... Veri türlerini farklı girmemiz durumunda daha sonra hatalar ile karşılaşabiliriz...


İkinci olarak Access veri tabanı programında verileri giriyoruz... Bu örnek için 5 kayıt girmemiz yeterli olacaktır...


Access veri tabanını kapatıyoruz... Yapmış olduğumuz veritabanı dosyasına okul ismini vermeyi ve tablo ismine de ogrenci ismini vermeyi unutmayalım... 

Program içerisinde aşağıdaki tasarım kısmını gerçekleştirelim... Amacımız burada ismi girilen öğrencinin ara butonuna basıldığında bütün bilgilerinin Listbox üzerinde gelmesini sağlamaktır... Alttaki ekranda da bu yapılmıştır... 


Kodlarımızın tamamına yakınını butona yazacağız... Ama program içerisinde farklı yerlerde veritabanını çağırmamız gerekebilir... Bu sebeple her yerde kullanabilmek için Acces e baglantı olayını butonun içinde değilde, genel tanımlama yaparak Form1 in içerisinde yazacağız... Bildiğiniz gibi bütün form özellikleri, olayları ve metodlar Form1 içerisinde yazılmaktadır... Şimdi sırası ile kod kısmına geçip bağlantımızı ve sorgularımızı yapalım;

1. Veritabanına bağlanmaya olayını gerçekleştiriyoruz...

OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=okul.mdb");
OleDbCommand komut = new OleDbCommand();

Burada yapılan bağlantı adresi kullanılan Access versiyonuna göre değişiklik göstermektedir... Bu kullanımı Access 2003 için geçerlidir... Accees 2010 da hazırladığınız bağlantı daha farklı olacaktır... Diğer derslerde bunun örneği verilecektir...

Önemli bir diğer kısımda bu komutun bu şekilde çalışabilmesi için hazırlamış olduğunuz Access dosyasının Projenizi kaydettiğiniz klasörde bin veya bin/debug klasörünün altında olmasıdır... Aksi takdirde buraya Data Source: kısmından sonra bütün dosya yolunu uzun bir şekil de yazmanız gerekmektedir... Örnek :

OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=D:\Belgelerim\Programlama\okul.mdb");

gibi olmalıdır...

2. Bu satırları yukarıdaki gibi yazdığınızda altının çizili olduğunu ve hata verdiğini göreceksiniz... Bunun sebebi ise kullanmış olduğumuz OleDbConnection ve OleDbCommand sınıflarının yer aldığı Data sınıfını using kısmında tanımlamamış olmamızdır... Bu sebeple aşağıdaki satırı using kısmına eklemek durumundayız...

using System.Data.OleDb;

Bu satır ile birlikte bütün veri tabanı sınıf ve komutlarını istediğimiz gibi kullanabileceğiz... Burada unutulmaması gereken bir durumda Access kullandığımız için OleDb alt sınıfını seçmiş olduğumuzdur...

3. Bundan sonraki adımda ise bütün program kodlarını veriyorum... Kullandığımız satırların yanlarında zaten açıklamaları yapılmaktadır...

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.OleDb;  // Access veritabanını kullanacağımız için OLEDB kütüphanesinden faydalanıyoruz...


namespace arama_1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // ÖRNEK - 1: TEXTBOX'A GİRİLEN İSİM DEĞERİNİ VERİTABANINDA ARATIYOR...

        //OledbConnection yeni bir veritabanı bağlantısı yapmamızı sağlar...
        // OleDbCommand komut nesnesi ile veritabanında işlem yapmamızı sağlayacak...
        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source=okul.mdb");
        OleDbCommand komut = new OleDbCommand();
        
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
                baglanti.Open();   // Veritabanını açıyoruz... 
                komut.CommandText = " Select * From ogrenci";  //Veritabanında sorgulama yaptırıyoruz... 
                komut.Connection = baglanti; // Veritabanı ile sorgu aracımızı birbirine bağlıyoruz...
                OleDbDataReader oku = komut.ExecuteReader(); // Veritabanından alınan bilgiyi oku isimli bilgi saklanacak değişkene atıyor...

                while (oku.Read()) // Bilgileri satır satır tamamı bitene kadar sıra ile okuyor... 
                {
                    if (textBox1.Text == oku[1].ToString()) // textbox daki bilgi ile veritabanının 2. alanındaki değerleri kıyaslıyor...
                    {
// Değerler aynı ise, veritabanın daki isim ile aynı satırda olan bütün bilgileri listbox'a yazıyor...
                        listBox1.Items.Add(oku[0].ToString());
                        listBox1.Items.Add(oku[1].ToString());
                        listBox1.Items.Add(oku[2].ToString());
                        listBox1.Items.Add(oku[3].ToString());
                    }
                }
                oku.Close();       // Saklama değişkenimizi kapatıyoruz...
                baglanti.Close();  // Veritabanımızı kapatıyoruz...
        }
    }
}

Buradaki bazı yerlere değinmek istiyorum... Örneğin oku[1] ile biz veritabanında bulunan isim alanına erişebiliyoruz... Bunun farklı yolları da var elbetteki ama burada yapılan 1değeri verilmesi ile veritabanında ki 2. alanın kast edilmesidir... Çünkü alan indexleri 0 dan başlamaktadır... 

Bir diğer husus ise sorgulamanın yapıldığı " Select * From ogrenci" komutudur... Bu kısmın C# ile alakası yoktur... Çünkü bu sorgulama baglantı yapılan Access dosyası üzerinde SQL yardımı ile yapılan bir sorgulamadır... Zaten program içerisinde kodlar farklı renkte olmuştur... Çünkü " ifadesini koyduğumuz andan itibaren yerleştirdiğimiz bütün komutlar SQL komutudur... 

Burada * ifadesi koyarak ogrenci isimli tablonun bütün alanlarının gelmesini sağlamış olmaktayız... * ifadesi yerine örneğin isim alan adını yerleştirmiş olsaydık sadece geriye isim alanına ait veriler gelecekti... Bu durumda oku[1] diye bir tanımlama yaparsak hata verecektir... Çünkü geriye sadece bir alan dönmüştür ve o da isim alanıdır... Bu durumda oku[0] dışında başka bir değer olma ihtimali yoktur... 

Eğer ki SQL satırı ile ilgili bir hata ile karşılaşırsanız program bunu bir sonraki satır olan yerde verecektir... Bunu da sakın unutmayalım... Yani OleDbDataReader oku = komut.ExecuteReader() satırında hata ile karşılaşırsanız bilin ki SQL satırı ile ilgili sıkıntı var demektir... 

Bu derslik bu kadar yeter... Uygulamayı yapmayı unutmayın...