C# ve SQL ile LIKE Komutunu Kullanmak (N Katmanlı Mimariyle)

Batuhan Düzgün tarafından yayınlanmıştır 26. August 2010 01:25

 
Merhaba arkadaşlar,yine C# ile olan makalelerimize devam ediyorum.Bu seferki konumuz hem C# ile ilgili,hem de SQL sorgulama diliyle ilgili.Yapmaya çalışacağımız şey aslında tam olarak şu: C# ile kodlayacağımız bir windows formundan,TextBox'a yazı yazıldıkça DataGridView'da sonuçların dinamik bir şekilde değiştiğini gözleyeceğiz.Evet,kabul ediyorum karışık bir cümle oldu.Şöyle bir örnekle daha da net olsun.Mesela,ben textbox'a "B" yazdığım anda,"B" ile başlayan kayıtlar datagridviewde gözükecek.Ben TextBox'tan veri girmeye devam ettikçe,datagridviewda gösterilen kayıtlar dinamik şekilde değişecek."B" yazdığım zaman mesela 100 kayıt varken,textbox'ın içine yazmaya devam ettikçe,"BA" yazdığım zaman bu sefer kayıt sayısı ya artacak ya da azalacak.Aradığımız kayıt giderek özelleştiği zaman mesela "BATUHAN" olduğu zaman kayıt sayımız belli ölçüde belirginleşecek.Aşağıdaki örneği inceleyiniz.
 
Textbox' içinde "B" yazılıyken,DataGridView'da 100 kayıt gösteriliyor diyelim.
 
Textbox'ın içinde "BA" yazılıyken,DataGridView'da 75 kayıt gösteriliyor diyelim.
 
Textbox'ın içinde "BAT" yazılıyken,DataGridView'da 40 kayıt gösteriliyor diyelim.
 
Textbox'ın içinde "BATU" yazılıyken,DataGridView'da 15 kayıt gösteriliyor diyelim. 
 
Textbox'ın içinde "BATUH" yazılıyken,DataGridView'da 5 kayıt gösteriliyor diyelim. 
 
Textbox'ın içinde "BATUHA" yazılıyken,DataGridView'da 3 kayıt gösteriliyor diyelim. 
 
Textbox'ın içinde "BATUHAN" yazılıyken,DataGridView'da 2 kayıt gösteriliyor diyelim. 
 
Görüldüğü gibi Textbox'ın içeriği değiştikçe DataGridView'de gözükecek sayısı bizim yazdığımız cümleye göre  anında değişecek.Dinamik bir şekilde sonuçlar kümesi alacağız.
 
1-)Arayüz Tasarımı ... 
 
Her zamanki gibi ilk olarak görsel arayüzümü tasarlayalım.Bunun için Visual Studio 2008 'i açıp.Ardından File>>New>>Project>>Windows Form Application 'ı seçiyoruz.
Projemize bir isim belirliyoruz.Ben isim olarak "Musteri_Kisisel_Bilgiler_Guncelle"  belirledim.Ardından Görsel arayüzü aşağıdaki resimdeki gibi oluşturuyoruz.
 
 
 
Form üzerine sırasıyla 10 adet TextBox, 1 adet DateTimePicker , 1 adet DataGridView, 3 adet Button ve 4 adet GroupBox yerleştiriyoruz.TextBox'ları isimlendirmeyi unutmayınız.TextBox'lara sırasıyla aşağıdaki isimlendirme verdim.
 
musteri_ara_txt_tcno
 
musteri_ara_txt_adi
 
musteri_ara_txt_soyadi
 
musteri_txt_tcno
 
musteri_txt_adi
 
musteri_txt_soyadi
 
musteri_txt_dogum_yeri
 
musteri_txt_vergi_dairesi
 
musteri_txt_vergi_numarasi
 
musteri_txt_email 
 
DataGridView'ın ismi ise dataGridView1  şeklindedir.
 
Butonların isimleri sırasıyla;
 
ara_tcno
 
ara_ad_soyad
 
guncelle  şeklinde belirledim.
 
 
2-) Veritabanı Tasarımı ...
 
Arayüz tasarımından sonra ise bilgilerimizin tutulacağı tablomuzu tasarlayalım.Tabloyu SQL Server 2005'te hazırladım.Sizler isterseniz MS Access'te hazırlayabilirsiniz ama yazacağınız veritabanı kodları ve sınıfları değişecektir.Ben SqlConnection sınıfı ile bağlantı açarken,MS Access kullanacak olanlar OleDbConnection sınıfı kullanarak bağlantı açabilecekler.Ayrıca veritabanına erişimi sağlayacak olan bağlantı cümlenizde tamamen değişecektir.
 
(Not:SQL Server 2005 ile veritabanı ve tablo oluşturmayla ilgili makaleler Veritabanı kategorisinde yayınlanacaktır.) 
 
 
 
 
 
Tablomuzda hazır.Tablo ismini "MusteriBilgileri" diye kaydettim.
 
Evet Arkadaşlar yapacağımız uygulamayı isterseniz N Katmanlı Mimariye uygun bir şekilde yazalım.
 
a-)Sunum Katmanı : Formumuzun olduğu dış dünyadan veri almamızı sağlayan kısım.Bütün TextBoxlar,Buttonlar gibi görsel öğeleri barındıran formumuz Sunum Katmanımız olacak.
 
b-)İş Katmanı : Bu katman ise veritabanı ile işlemlerimizi yapmaya yarayacak olan sınıfları ve kodları barındıracak olan kısımdır.Bu katmanı iki ayıracağız.
 
      * Sunum Katmanı Ucu : Bu katmanda veritabanından formumuza gelen veya formumuzdan veritabanına gidecek olan bilgileri belli sınıflarda toplayacak olan ara katmanımız. 
 
      * Veri Katmanı Ucu : Bu katman ise fiziksel olarak bulunan veritabanımla ilgili Ekleme,Silme,Veri çekme ve Güncelleme işlemlerini yapacak olan sınıfları barındıracak olan katmanımız.
 
c-)Veri Katmanı : Bu katman veritabanımın ve ona bağlı tabloların bulunduğu katmanımız.Yani veritabanı tasarladığım,oluşturduğum katman.Bizim projemde bu katman yukarıda oluşturduğum "MusteriBilgileri" tablom oluyor. 
 
Aslında farkında olmadan iki katmanı tasarladım bile.Bunlar Sunum Katmanı (yani formumuz) ,diğeri ise Veri Katmanı (yani veritabanı tablomuz).Şimdi ilk iş olarak 
Sunum Katmanı Ucu katmanını yazacağım.
 
2.a-) Sunum Katmanı Ucu 
 
Bunun için yazacağım kodları tutacak bir tane klasör oluşturuyorum.Adını da AppCode olarak belirliyorum.Proje üzerine sağ tık  yaparak Add sekmesinden New Folder yaparak yeni bir klasör ekleyebilirsiniz.Ben şimdilik bir tane sınıf ekleyeceğim ama düşünün proje büyüdükçe Sunum Katmanı Ucu 'na ait bütün sınıfları buraya ekleyeceğim.Buda karmaşayı ve karışıklığı önlemiş olacak neyi nerde,hangi sınıfı hangi katmanda kullanacağım netleşmiş olacak.Eklemiş olduğum AppCode klasörüne sağ tıklayarak Add sekmesinden bir tane Class (Sınıf) ekliyoruz.Ben isim olarak "MusteriBilgileri" şeklinde belirledim.Bu sınıfa ait kodlar aşağıdaki gibidir.
 
MusteriBilgileri.cs Kodları ... 
 

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

 

namespaceSAUBT_Arac_Kiralama_Otomasyonu.AppCode

{

    class MusteriBilgileri

    {

        publicMusteriBilgileri()

        {}

        privateint MusteriID;

        public int MUSTERIID

        {

            get{ return MusteriID; }

            set{ MusteriID = value; }

        }

        privatestring MusteriAdi;

        public string MUSTERIADI

        {

            get{ return MusteriAdi; }

            set{ MusteriAdi = value; }

        }

        privatestring MusteriSoyadi;

        public string MUSTERISOYADI

        {

            get{ return MusteriSoyadi; }

            set{ MusteriSoyadi = value; }

        }

        privatestring MusterTCNO;

        public string MUSTERITCNO

        {

            get{ return MusterTCNO; }

            set{ MusterTCNO = value; }

        }

        privatestring MusteriDogumYeri;

        public string MUSTERIDOGUMYERI

        {

            get{ return MusteriDogumYeri; }

            set{ MusteriDogumYeri = value; }

        }

        privateDateTime MusteriDogumTarihi=new DateTime();

        public DateTime MUSTERIDOGUMTARIHI

        {

            get{ return MusteriDogumTarihi; }

            set{ MusteriDogumTarihi = value; }

        }

        privatestring MusteriVergiDairesi;

        public string MUSTERIVERGIDAIRESI

        {

            get{ return MusteriVergiDairesi; }

            set{ MusteriVergiDairesi = value; }

        }

        privatestring MusteriVergiNo;

        public string MUSTERIVERGINO

        {

            get{ return MusteriVergiNo; }

            set{ MusteriVergiNo = value; }

        }

        privatestring MusteriEmail;

        public string MUSTERIEMAIL

        {

            get{ return MusteriEmail; }

            set{ MusteriEmail = value; }

        }

    }

}

  
  Bu sıfınımız formdan gelen bilgileri bünyesindeki değişkenlerde toplayıp.Bütün bir bilgi topluluğunu tek bir tip içine sarmalamış oluyoruz.Yani bir bakıma bütün verileri bir paket içine topladık.Burada ki sınıftan bir nesne üreterek,bilgilerle doldurup,Veri Katmanı Ucu'na parametre olarak yollayacağız.Şu an kafanızda şekillenmediyse bile yeri geldiğince ben sizleri uyarıp dikkatinizi çekeceğim. 
  
2.b-) Veri Katmanı Ucu ... 
 
Bu katmanda yazacağımız sınıflar ve kodlar veritabanı işlemlerini yapacak olan kodlardır.Veritabanından verileri almayı,veritabanına kayıt eklemeyi,silmeyi ve güncellemeyi gerçekleştirecek olan kodlardır.Bu katman Sunum Katmanı ucundan gelen bilgileri alıp,veritabanına işleyecek veya üst katmandan gelen talebe göre belli kayıt kümelerini üst katmana döndürecek.Tabi üst katmana veri döndürürken verileri,Sunum Katmanı Ucu'nda yer alan sınıfları kullanacak.Şimdi bu katmana dair kodlarımızı yazalım.Bu katmanda yazacağımız kodlar TCNO'ya göre sorgulama ve Ad-Soyad 'a göre sorgulamayı içermektedir.
 
Musteri_DB_Proses.cs Adlı Kod Dosyamızın Kodları ... 
 

using System;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Data;

usingSystem.Data.SqlClient;

usingSAUBT_Arac_Kiralama_Otomasyonu.AppCode;

usingSystem.Windows.Forms;

 

namespaceSAUBT_Arac_Kiralama_Otomasyonu.VeriTabaniBaglantiKatman

{

  class Musteri_DB_Islem

  {

        privateSqlConnection Baglanti;

        privateSqlCommand Komut;

 

        publicMusteri_DB_Islem()

        { }

 

public bool TCNOSorgula(ref MusteriBilgileri Musterim,stringTCNO)//Bu metod TCNO sorgula butonuna basılınca

{                                                      //anlık çalışacak.Bool tipinde bir değer döndürüyor.

            //Nedenbool tipinde değer döndürüyor dereniz eğer aradığımız kaydı bulumazsak false değergöndürecek

            //böylecebizlerde false dönünce,böyle bir kayıt yok diye mesajı ekranda gösterebileceğiz.

 

  boolBayrak = false; //bayrakadlı değişkeni false'a eşitliyorum.Kayıt bulamazsa varsayılan olarak,false dönsün.

              

using(Baglanti=new SqlConnection(BaglantiCumlesi.Baglanti_String))//bu satırda bağlantı cümlesini verip,SQL Server'a bağlantıaçıyoruz.

 {

                using(Komut = new SqlCommand("TCNOGoreAra",Baglanti))//Stored procedure ismini ve baglanti nesnesini kurucuya atıyoruz.

                {

                    try//try-catch bloklarıyla kod çalışırken hata oluşursaprogramımız donmasın hata mesajı fırlatsın diye korumaya alıyoruz.

                    {

Komut.CommandType = CommandType.StoredProcedure;//SqlCommand nesnesi olan Komut'un,komut tipininStoredprocedure old. belirtiyoruz.

Baglanti.Open();

Komut.Parameters.Add("@MusTCNO", SqlDbType.NVarChar).Value= TCNO;//bir üst katmandan gelen,

                        //tcno bilgisine göre arama yapacağımız için stored procedure içinde tanımladığımız@MusTCNO değişkenine

                        //gelen değeri atıyoruz.

SqlDataReaderOkuyucu=Komut.ExecuteReader();//şimdi tablomuzdaverileri okuyacağız.Bunun için,

                        //Komut.ExecuteReader() metodunu kullanıyoruz.

      if(Okuyucu.Read())//if ile aradığımız kritere uygun birkayıt okursan if'in içine gir diyoruz.

      {

//if içine girdiğizaman,bir üst katmanda yeralan MusteriBilgileri sınıfına ait nesnenin içini,

//veriabanındanokuduğumuz bilgilerle doldurup,Bir üst katmana geri vereceğiz.                     

Musterim.MUSTERITCNO =Okuyucu.GetValue(2).ToString();//veritabanından okuduğumdeğerleri,sırayla nesnemizin değişkenlerine atıyoruz.

Musterim.MUSTERIADI =Okuyucu.GetValue(0).ToString();

Musterim.MUSTERISOYADI =Okuyucu.GetValue(1).ToString();

Musterim.MUSTERIDOGUMTARIHI= Convert.ToDateTime(Okuyucu.GetValue(4));

Musterim.MUSTERIDOGUMYERI =Okuyucu.GetValue(3).ToString();

Musterim.MUSTERIVERGIDAIRESI=Okuyucu.GetValue(5).ToString();

Musterim.MUSTERIVERGINO =Okuyucu.GetValue(6).ToString();

Musterim.MUSTERIEMAIL =Okuyucu.GetValue(7).ToString();

Bayrak = true;//ve aradığımız kaydıbulduğumuz için bayrak adlı değişkeni true yapıyoruz.

                 }

Okuyucu.Close();//SqlDataReader nesnesinin okumasını sonlandırıyoruz.

Baglanti.Close();//veritabanı bağlantımızı kapatıyoruz.

               }

        catch (Exception ex)//eğer birhata alırsak hata mesajı fırlatıyoruz.

        {

                        MessageBox.Show(ex.ToString());

        }

      }

    }

  returnBayrak;//bool değişkeni return ile çağrıldığı yere döndürüyoruz.

}

public bool TCNOSurekliSorgula(refDataSet Musterim,refMusteriBilgileri MyMus,string TCNO)

        { //bu metodise textbox'tan veri girdikçe datagridview'ı güncelleyecek.

            boolBayrak = false;

            Musterim.Clear();

            using(Baglanti = new SqlConnection(BaglantiCumlesi.Baglanti_String))//Bağlantı cümlesini veriyoruz.

            {

using(Komut = new SqlCommand("SELECTMusteriAdi,MusteriSoyadi,MusteriTCNO,MusteriDogumYeri,

MusteriDogumTarihi,MusteriVergiDairesi,MusteriVergiNo,MusteriEmailFROM MusteriBilgileri

WHERE MusteriTCNO LIKE " + TCNO, Baglanti))

                {//sqlkomutumuzu yazıyoruz.

                    try

                    {

                        Komut.CommandType = CommandType.Text;

                        Baglanti.Open();

                        SqlDataAdapter Adap = new SqlDataAdapter(Komut);

                        Adap.Fill(Musterim);

                        SqlDataReader Okuyucu = Komut.ExecuteReader();

                        if (Okuyucu.Read())

                        {

                            MyMus.MUSTERITCNO =Okuyucu.GetValue(2).ToString();

                            MyMus.MUSTERIADI =Okuyucu.GetValue(0).ToString();

                            MyMus.MUSTERISOYADI= Okuyucu.GetValue(1).ToString();

                           MyMus.MUSTERIDOGUMTARIHI = Convert.ToDateTime(Okuyucu.GetValue(4));

                           MyMus.MUSTERIDOGUMYERI = Okuyucu.GetValue(3).ToString();

                           MyMus.MUSTERIVERGIDAIRESI = Okuyucu.GetValue(5).ToString();

                            MyMus.MUSTERIVERGINO= Okuyucu.GetValue(6).ToString();

                            MyMus.MUSTERIEMAIL= Okuyucu.GetValue(7).ToString();

                        }

                        Okuyucu.Close();

                        Bayrak = true;

                        Baglanti.Close();

                    }

                    catch(Exception ex)

                    {

                        MessageBox.Show(ex.ToString());

                    }

                }

            }

            returnBayrak;

        }

        public bool AdSoyadSorgula(refMusteriBilgileri Musterim, string TCNO)//Bu metod isetcno sorgulama yerine ad-soyad!a göre sorgulama yapıyor.

        {

            boolBayrak = false;

            using(Baglanti = new SqlConnection(BaglantiCumlesi.Baglanti_String))

            {

                using(Komut = new SqlCommand("AdSoyadaGoreAra", Baglanti))

                {

                    try

                    {

Komut.CommandType = CommandType.StoredProcedure;

Baglanti.Open();

Komut.Parameters.Add("@MusAd", SqlDbType.NVarChar).Value= TCNO;

Komut.Parameters.Add("@MusSoyAd", SqlDbType.NVarChar).Value= TCNO;

               SqlDataReaderOkuyucu = Komut.ExecuteReader();

               if(Okuyucu.Read())

               {

Musterim.MUSTERITCNO =Okuyucu.GetValue(2).ToString();

Musterim.MUSTERIADI =Okuyucu.GetValue(0).ToString();

Musterim.MUSTERISOYADI =Okuyucu.GetValue(1).ToString();

Musterim.MUSTERIDOGUMTARIHI= Convert.ToDateTime(Okuyucu.GetValue(4));

Musterim.MUSTERIDOGUMYERI =Okuyucu.GetValue(3).ToString();

Musterim.MUSTERIVERGIDAIRESI= Okuyucu.GetValue(5).ToString();

Musterim.MUSTERIVERGINO =Okuyucu.GetValue(6).ToString();

Musterim.MUSTERIEMAIL =Okuyucu.GetValue(7).ToString();

          Bayrak = true;

               }

                        Okuyucu.Close();

                        Baglanti.Close();

                    }

                    catch(Exception ex)

                    {

                        MessageBox.Show(ex.ToString());

                    }

                }

            }

            returnBayrak;

        }

public bool AdSoyadSurekliSorgula(refDataSet Musterim,refMusteriBilgileri MyMus, string MusteriAdim,stringMusteriSoyadim)

 {

            boolBayrak = false;

            Musterim.Clear();

using (Baglanti= new SqlConnection(BaglantiCumlesi.Baglanti_String))

 {

using(Komut = new SqlCommand("SELECTMusteriAdi,MusteriSoyadi,MusteriTCNO,MusteriDogumYeri,MusteriDogumTarihi,

MusteriVergiDairesi,MusteriVergiNo,MusteriEmailFROM MusteriBilgileri

WHERE MusteriAdi LIKE " + MusteriAdim + " AND " + "MusteriSoyadi LIKE " + MusteriSoyadim, Baglanti))

                {

                    try

                    {

                        Komut.CommandType = CommandType.Text;

                        Baglanti.Open();

                        SqlDataAdapter Adap = new SqlDataAdapter(Komut);

                        Adap.Fill(Musterim);

                        SqlDataReader Okuyucu = Komut.ExecuteReader();

                        if (Okuyucu.Read())

                        {                       

MyMus.MUSTERITCNO =Okuyucu.GetValue(2).ToString();                  

MyMus.MUSTERIADI =Okuyucu.GetValue(0).ToString();                   

MyMus.MUSTERISOYADI =Okuyucu.GetValue(1).ToString();                          

MyMus.MUSTERIDOGUMTARIHI = Convert.ToDateTime(Okuyucu.GetValue(4));                     

MyMus.MUSTERIDOGUMYERI =Okuyucu.GetValue(3).ToString();                   

MyMus.MUSTERIVERGIDAIRESI =Okuyucu.GetValue(5).ToString();                

MyMus.MUSTERIVERGINO =Okuyucu.GetValue(6).ToString();

                          

MyMus.MUSTERIEMAIL =Okuyucu.GetValue(7).ToString();

                        }

                        Okuyucu.Close();

                        Bayrak = true;

                        Baglanti.Close();

                    }

                    catch(Exception ex)

                    {

                        MessageBox.Show(ex.ToString());

                    }

                }

            }

            returnBayrak;

        }

    }

}

 

Şimdi yukarda yapılanlara biraz değinelim.Yukarıdaki kodda 4 adet metod var.Bunlar iki ye ayrılıyor.Bunlardan AdSoyadSorgula ve TCNOSorgula metodları butona tıklayınca anında bir sonuç kümesi döndürecek.Siz textboxlara yazmaya başlayınca otomatik olarak datagridview'ı değiştirmeyecek.Sadece textbox'a girdiğiniz kritere uygun kayıt arayacaklar.

Bunun dışında,TCNOSurekliSorgula ve AdSoyadSurekliSorgula metodları ise textbox'a veri girmeye başladıkça datagridview'ı doldurmaya başlayacaklar.Yani ben textbox'a TCNO 'ya 1 yazdığım zaman 1 ile balayn kayıtları getirecek,ardından 2'ye basınca 12 ile başlayan kayıtları datagridview'a dolduracak.Peki bunu nasıl  yapıcak?

Bunu makaleminde başında yazdığım gibi SQL sorgulama dilindeki,LIKE komutuyla yapacak.LIKE komutu şu şekilde çalışır.SELECT ile bilgileri okuyacağınız tablonun ilgili sütunlarını belirlersiniz,ardından WHERE koşulu ile arama yaparken,kriterimizi karşılaştıracağımız sütunu yazarsınız,ve son olarak LIKE komutunu yazıp,ardından gelecek karakter setini yazarsınız.Bunları bir örnek ile açıklayalım.

 SELECT * FROM Tablo1 WHERE sutun1 LIKE 'FB%'     bu yazdığımız SQL cümlesinin anlamı;Tablo1'deki bütün sütunları SELECT * ile çek,ardından WHERE koşulu koyarak,sutun1'de FB ile başlayan kayıtları bul getir demektir.FB karakter setinin ardından ne gelirse gelsin farketmeyecektir. 'FB45' veya 'FB_GS_BJK' yazsa bile FB ile başlayan her kaydı getirecektir.İşte bizde TCNO'ya 123 yazarsak bunu '123%' şeklinde arattırıp,kayıtları datagridview'a yükleyeceğiz.Eğer ki '1234' yazarsam dinamik olarak bu kritere uygun kayıtları çekecek.Sanırım yapmaya çalıştığımız iyice netleşti. :)

 (Not: Koyu ile çizilmiş satırlar önemli olduğu için,dikkatinizi çekmesi açısından kalınlaştırdım.)

Böylece 4 katmanızıda oluşturmuş oluyoruz.Dikkat edereniz projeyi katmanlara ayırmak,hem kafamızda mantıksal bir şekillenmeye yol açtı hemde projeye bir modülerlik kazandırdı.Eğerki benim sunum katmanım değişse bundan Veri Katmanı veya İş Katmanım etkilenmeyecek.Ayrıca,her iş için gerekli olan kodlar işin yapılacağı katmana eklenecektir.Buda belli bir sistem dahilinde ve düzenli ilerlemeyi sağlayacaktır.

Hadi Katmanları Birleştirip,Haberleştirelim ... 

Şimdide formumuza çift tıklayıp kod sayfasına geçelim.Bu kısımda artık form ile katmanları birleştireceğiz.Formla ilgilendiğimiz için Sunum katmanındayız.O halde yazdığımız alt katmanları kullanabilmek için,bunları projeye bağlayalım.Bunun aşağıdaki iki satırı yazacağız.

usingSAUBT_Arac_Kiralama_Otomasyonu.AppCode;//Sunum Katmanı Ucu

usingSAUBT_Arac_Kiralama_Otomasyonu.VeriTabaniBaglantiKatman; // Veri Katmanı Ucu 

 

 İş katmanımıza ait iki katmanıda eklemiş olduk. "SAUBT_Arac_Kiralama_Otomasyonu" bu isim uzayımız (namespace), 

aynı zamanda projemizin ismi.Biz katmanlara ait kodlarımızı yazarken,klasörlerimizi bu projeye dahil etmiştik.Bu yüzden projemizin ismini taşıyan isim uzayına dahiller.

Ardından katmanlara ait nesnelerimizi üretelim.Bunlar veritabanı işlemlerinde bizlere yardımcı olacaktır.

 

MusteriBilgileriMusteriBilgi = new MusteriBilgileri(); //Sunum Katmanı Ucu'na ait sınıfımızın nesnesi.

Musteri_DB_Islem MusteriDB= new Musteri_DB_Islem(); //Veri Katmanı Ucu'na ait sınıfımızın nesnesi.

DataSetGridDataSet = new DataSet();  // Bu değişkenimiz ise tablodan okuduğumuz verileri tutacağımız Dataset'imiz.

 Şimdi önemli bir kısımdayız yine,burada musteri_ara_txt_tcno adlı textbox'ımızın TextChanged metodunu kullanacağız.TextBox'ın olay metodlarına erişmek için,Properties panelinde gözüken şimşek ikonuna tıklayınız.Oradan istediğiniz ve size uygun olan olay metodunu seçebilirsiniz.

TextChanged metodu TextBox'a yazdıkça tetiklenir.Mesela 'a' yazarsam bir kere işletilir.Eğer bir daha bir karakter girersem.Bir daha çalışır.Tam da benim istediğim gibi çünkü ben yazdıklça kayıtların sıralanmasını istiyorum.TextBox'a TCNO'yu girmeye başladıkça genel özele doğru bir arama yapacak.

 

private void musteri_ara_txt_tcno_TextChanged(object sender, EventArgs e)

        {

            AranacakTCNO = "'"+musteri_ara_txt_tcno.Text.Trim()+"%'";

            //TextBox'tan aldığımız veriyi tek tırnaklar arasına almamız gerekiyor.Çünkü,

            //LIKE komutu tek tırnaklar arasında bir ifadeyi kabul ediyor.O yüzden,

            //TextBox'taki veriyi uygun formata dönüştürüp alt katmana vermemiz lazım.

            //Aryıca TextBox'taki ifademizin sonuna % karakterini ekliyoruz.

            //Böylece,yazdığımız ifade ile başlayan bütün kayıtları getir demiş oluyoruz.

            if (MusteriDB.TCNOSurekliSorgula(ref GridDataSet,ref MusteriBilgi,AranacakTCNO))

            {

                DatagridDoldur();

                TextboxlariDoldur();

            }

}

 

DatagridDoldur Metodu ...

public void DatagridDoldur()

{

     dataGridView1.DataSource = GridDataSet.Tables[0];

}

TextboxlariDoldur Metodu ...

public void TextboxlariDoldur()

{

            musteri_txt_tcno.Text = MusteriBilgi.MUSTERITCNO;

            musteri_txt_adi.Text = MusteriBilgi.MUSTERIADI;

            musteri_txt_soyadi.Text = MusteriBilgi.MUSTERISOYADI;

            musteri_txt_dogum_yeri.Text = MusteriBilgi.MUSTERIDOGUMYERI;

            if (MusteriBilgi.MUSTERIDOGUMTARIHI > DateTime.MaxValue || MusteriBilgi.MUSTERIDOGUMTARIHI < DateTime.MinValue)

            {

                datetime_dogum_tar.Value = MusteriBilgi.MUSTERIDOGUMTARIHI;

            }

            else

            {

                datetime_dogum_tar.Value = DateTime.Now;

            }

            musteri_txt_vergi_dairesi.Text = MusteriBilgi.MUSTERIVERGIDAIRESI;

            musteri_txt_vergi_numarasi.Text = MusteriBilgi.MUSTERIVERGINO;

            musteri_txt_email.Text = MusteriBilgi.MUSTERIEMAIL;

}

 

musteri_ara_txt_adi TextBox'ının TextChanged Metodu ...

 

 

string AranacakMusAdi=String.Empty;

string AranacakMusSoyadi = String.Empty;

 

private void musteri_ara_txt_adi_TextChanged(object sender, EventArgs e)

{

            if (musteri_ara_txt_adi.Text == null)

            {

                AranacakMusAdi = "'" + " %'";

            }

            else

            {

                AranacakMusAdi = "'" + musteri_ara_txt_adi.Text.Trim() + "%'";

            }

 

            if (musteri_ara_txt_soyadi.Text=="")

            {

                AranacakMusSoyadi = "'" + " %'";

            }

 

            if (MusteriDB.AdSoyadSurekliSorgula(ref GridDataSet,ref MusteriBilgi,AranacakMusAdi,AranacakMusSoyadi))

            {

                DatagridDoldur();

                TextboxlariDoldur();

            }

}

Sonuç ...

 

 
Evet,uzun ve yorucu bir makalemin sonuna geldi.Gerçekten ben bile yazarken yoruldum. :) Umarım okurken sıkılmazsınız.Kabul ediyorum biraz uzun ama kendimi kaptırdım anlatmaya,herşeyi detayına kadar anlatmak istedim.Umarım yararlı olmuştur.Bir sonraki makalemde görüşmek dileğiyle ...

Batuhan Düzgün

Sakarya Üniversitesi

Bilgisayar Mühendisliği

Currently rated 4.8 by 8 people

  • Currently 4.75/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Etiketler:

C#

Comments

Add comment


(Will show your Gravatar icon)  

  Country flag

biuquote
  • Comment
  • Preview
Loading





Bu site BlogEngine.NET 1.4.5.0 ile oluşturulmuştur. Türkçe çevirisi BlogEngine TR ekibi tarafından yapılmıştır.

Batuhan Düzgün

Sakarya Üniversitesi 

Bilgisayar Mühendisi

Endüstri Mühendisi

Yeditepe Üniversitesi

Bilgisayar Mühendisliği Yüksek Lisans 

 sahibinden.com

   Kıdemli Uzman Yazılım Mühendisi  

E-Mail 

   batuhan.duzgun@sahibinden.com

   batuhan.duzgun@windowslive.com

  github.com/batux

 

Sayfalar

Calendar

<<  November 2018  >>
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

Yazıları geniş takvimde göster