Geçenler projeyle uğraşırken gerçekten kafayı yedim bazı yerlerde çok ufak olsafa hatalar alıyodum buda sql cümleciğinin çalışmamasını tetikliyodu bir kaç araştırmadan sonra Selim Götaş isimli bir hayırseverin databes işlemlerinin püf noktalarını anlattığı bir yazıya denk geldim.Yazıyı direk koyucam çünkü gerçekten çok güzel bir anlatım;
Merhaba arkadaşlar, C# ta database işlerinin nasıl yapıldığı , database nasıl bağlanıldığı ve SQL cümlelerinin nasıl kullanıldığı hakkında belki kısa ama önemli olduğuna inandığım notları sizlerle paylaşacam bu makalede.
İlk olarak database nedir ? sorusuyla başlayalım.
Database bir bilgi topluluğunun beraberce ve düzenli bir şekilde bir arada tutulması ve gerektiğinde ona kolayca ulaşıp kullanabildimiz, üzerinde işlemler yapıp tekrardan onları saklayabilmemizi sağlayan yapıdır. Bu sayede kullanıcıdan aldığımız bilgileri kaybetmeden onları bir yere saklayıp ihtiyaç duyduğumuzda geri çağırmamız mümkün olabilmektedir.
C# database işlemlerin geneline ADO denir. Ado ile database bağlanma yöntemlerinin bir önceki yazımızda anlatmıştık o yüzden bu konuda çok fazla detaya girmicem bu yazımda. CSharp ile ADO adlı makaleyi okumak için tıklayınız.
C# ile database işlemleri genel olarak şu sıralamayla gerçekleşir.
1- System.Data.OleDb; yada System.Data.SqlClient; yada hangi database bağlanacaksak onun name space’ini eklememiz gerekmektedir.
2- Database bağlanmamızı sağlıcak bir connectionString bilgisini yazmamız gerekcektir.
3-Oluşturduğumuz ConnectionString bilgisini Connection nesnesine parametre olarak vererek bir database bağlantısı yaratırız.
4-Yarattığımız bu database bağlantısında veri çekmek için bir Sql cümlesi hazırlamalıyız. “select * from tablo_adı” gibi..
5- daha sonra bu Sql cümlemizide bir DataAdapter yada Command nesnesine parametre olarak vererek database den bilgileri çekebiliriz.
Ben burda biraz detaylı bir açıklama yapmak istiyorum. Çünkü yeni başlayan arkadaşların en çok kafaları burada karışıyor. Burda önce SQL hakkında biraz bilgi vermek istiyorum ve sonrada bu yazdığımız SQL cümlelerinin bizim programımız içinde nasıl kullanılması gerektiği hakkında bilgi verecem.
Öncelikle SQL cümleleri bizim database işlemlerimizi çok kolaylaştıran bir database dilidir. Bu SQL cümlelerimizi access database inde de kullanabiliriz,oracle da da , MsSql de de. O yüzden SQL kullanmasını ne kadar iyi bilirsek,database programcılığında hayatımız o kadar kolaylaşacaktır. Ben en basit olarak Select cümlesi üzerinde duracağım. Select cümlesinin anlamı Seçmektir. Yani database den bir bilgiyi seçme amaçıyla kullanırız. Önce SELECT yazarız sonra YILDIZ işareti yada databasedeki hangi kolonları listelemek istiyorsak onların adını sonra FROM kelimesini yazarız burda hangi TABLO daki bilgileri seçeceğimizi belirtiriz. Yani personel isimli bir tablomuz olduğunu varsayalım. Tablomuzun yapısının aşağıdaki gibi olduğunu varsayalım.
| PERSONEL | |
| Personel_no | number |
| Personel_adi | Text |
| Personel_soyadi | Text |
| Meslegi | Text |
Eğer biz tablodaki bütün kayıtları görmek istersek “Select * from personel” dememiz yeterli olacaktır. Böylece o tabloda kaç tane kayıt varsa bütün hepsinin bilgileri gelecektir.Personel_no, personel_adi,personel_soyadi ve meslek bilgisi görüntülenecektir.
Eğer biz bütün bilgileri değilde sadece personellerin adını ve soyadını görmek istersek o zamana Select personel_adi, Personel_soyadi from Personel dememiz yeterli olacaktır.
Şimdi bir aşama ilerleyelim ve diyelimki bize bütün kayıtların gelmesin diyelim. Yani 100 kişinin kayıtlı olduğunu varsayalım tablomuzda ama biz sadece Adı selim olan kayıtları getirmek istersek eğer o zaman WHERE koşul ifadesini kullanmamız gerekecektir. WHERE ifadesi SQL cümlelerimizde belli koşulları taşıyan bilgiler getir demek oluyor. WHERE koşulundan sonra hangi kolona koşul vereceksek onu yazmamız gerekmektedir. Dediğim gibi adı selim olan kayıtları getirmek için Select * from personel where personel_adi=’selim’ dememiz gerekmektedir. Burda dikkatimiz bişeyin çekmesi gerekmektedir selim ifadesini tek tırnak içinde yazdık. Çünkü personel_adi kolonu text yazı karaktersel bir bilgi tutmaktadır. O yüzden SQL içinde text bir ifade yazacaksak eğer her zaman için tek tırnak içinde yazmamız gerekmektedir, bunu sakın unutmayalım.
Sayısal değerlerde ise öyle bir zorunluluğumuz yoktur, sayısal bir değeri ifade edeceksek eğer onu olduğu gibi yazabiliriz.Mesela personel_no su 10 olan kayıtı seçmek istersek eğer Select * from personel where personel_no=10 diyoruz sadece.
Bir diğer önemli nokta ise biz SQL cümlemizde ‘selim’ diye yazdık. Yani küçük harflerle yazdık. Eğer bizim database’imizde küçük değil de büyük harflerle SELİM diye kayıtlıysa eğer bizim SQL cümlemiz sonucunda bir kayıt dönmeyecektir. O yüzden bu konuda da dikkatli olmamız gerekmektedir. Kendimize bir kural belirlemeliyiz, database’e kayıt eklerken ya hep büyük harfle yada hep küçük harfle kayıt etmeliyiz ve SQL cümlelerimizide bu yönde yazmalıyız.
Eğer böyle yapmazsak o zaman SQL cümlemiz içinde şöyle bir değişiklik yaparak bu sorunu da atlatabiliriz. Biz Text ifademizi hep büyük harflerle yazarız be kolon adinida upper ifadesi içine alırız. böylece bütün karşılaştıracağı ifadeleri biz kendimizi büyük harfe çevirmiş oluruz ve text ifadeyide büyük harfle yazdığımız için büyük-küçük harf sorunundan kurtulmuş olacaz. Select * from personel where upper (personel_adi)=’SELİM’
Burda kullandığımız Upper ifadesi bir SQL fonksiyonudur. Bunun gibi bir sürü yararlı fonksiyon vardır. bu konuda daha detaylı bilgiyi SQL kitaplarından veya internetteki dökümanlardan elde edebilirsiniz.
Aslında SQL çok daha detaylı ve uzun bir konudur, yeri geldikçe detaylarına iyice ineceğim, ama şimdi bu SQL cümlelerinin programımız içinde nasıl yazılacağını anlatacağım. Çünkü çok sık yapılan bir hata SQL içinde ki tek tırnakları program içinden yazarken eksik yada yanlış yazılmasıdır. Çünkü programlarımız içinde de text bilgileri yazarken çift tırnak işareti kullanıyoruz. Bu yüzden kimi yerde tek tırnak kimi yerde çift tırnak kullanmamız gerekecektir o yüzden arada bazen karışıklıklar olabilmektedir. Bu karışıklıklar normaldir ama en güzel çözüm yolu neyi nerde kullanacağımızı bilmemizdir. Nerde tek tırnak nerde çift tırnak kullanıldığını iyi bilirsek bu tür karışıklıkları minimuma indirgemiş oluruz. Ki kural çok basittir zaten SQL içinde Text ifade yazarken tek tırnak kullanırız, programımız içinde text ifade kullanılırken çift tırnak kullanırız. Yani en basitinden şu select cümlemizi ,programımız içinde şöyle yazmamız gerekmektedir, başına ve sonuna çift tırnak eklememiz gerekmektedir.
OleDbConnection Baglanti = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:InetpubwwwrootHtmlOrnekDatabaseOrnekDatabase.mdb;Persist Security Info=False");
OleDbCommand komut = new OleDbCommand(" Select * from personel where upper (personel_adi)='SELİM' " , Baglanti );
Aslında böyle basit bir örnekte pek fazla bir sorun olmamaktadır. Koşul ifadeleri çoğaldıkça ve kullanıcıdan gelen bilgilere göre sorgu yazılmak istendiğinde işler biraz daha karışık gibi gelebilir.
bir personel arama ekranımız olduğunu varsayalım ve formumuzda txtPersonelAdi,txtPersonelSoyadi,txtPersonelNo adında 3 tane textbox olduğunu varsayalım ve kullanıcı bütün bunları doldurum arama butonuna bastığında o personeli arayıp bulamamız gerekmektedir. O zaman şöyle bir değişiklik yapmamız gerekmektedir.
>string SqlCumlesi = " Select * from personel where upper (personel_adi)='" + txtPersonelAdi.Text + "' and upper (personel_soyadi)='" + txtPersonelSoyadi.Text + "' and personel_no=" + txtPersonelNo.Text ;
OleDbCommand komut = new OleDbCommand(SqlCumlesi, Baglanti );
Yukarıdaki SQL cümlemizin daha iyi anlaşılır olması için SqlCumlesi isimli bir değişkene atanmıştır. Burda dikkat edilmesi gereken önemli noktalardan biri Text ifade olan adı ve soyadı ifadeleri tek tırnak içine aldığımızdır ve personel no sunu almadığımızdır.Onun dışından kullanıcıdan gelecek bilgilere göre dinamik bir Sql oluşturabilmek için textboxlardan gelen ifadeleri alıp sql için ekleyebilmek için textbox.Text özelliğini kullandık.
Bu yazımızda dikkat etmemiz gereken ufak fakat önemli bilgilere değindik arkadaşlar. Bu konuda söylenebilecek daha birçok şey var, sizlerde bilgisayar başına oturup örnek programlara yapmaya başladıkça bu tür ufak ama öemli ipuçlarının hayatımızı ne kadare kolaylaştırdığını anlıcaksınız. Herkese kolay gelsin..
Alıntıdır. Selim Göktaş’a teşekkürlerimi sunuyorum.


Yurda Dön
13 Comments
hehe kafayı yemene bende yardımcı oluyorum
şimdi databaseimi adam akıllı baştan tasarladım sorun yok
sonundaa
bende orace veri tabanından textbox a yazılan değere göre veri çekmeye çalışıyorum.Fakat bir türlü oradaki değişkeni parametesini veremedim.
sevda açıkçası oracle’ ı fazla bilmiyorum ama konuyu biraz daha açarsan yardım edebilirim sanırım
Şöyle çıklamaya çalışayım.Veri tabanından kişi isimlerine göre istenilen bilgileri çekmem gerek.Her kişinin ayrı bir numarası var.Ben select cümlesinde tablodan şu numarayı getir dediğimde getiriyor.Fakat form üzerine bir textbox ekleyip oraya girilen değere göre eşleştirme yap dediğim zaman değişken hatası veriyor çok aradım nette ama birşey bulamadım…Aslında net olarak şöle de anlatabilirim select cümlesine değişken tanımlayıp,sonra değişkene parametre ekleyip textbox a yönlendirme yapmak istiyorum.
sevda eğer select cümleni yazabilirsen yardım edebilirim.
“select * from bart0630 where bar_pat_no=”
işte bu eşitliğe textbox’ın text ini yazdırmam gerek..
“select * from bart0630 where bar_pat_no=@name”,textbox.text;
Add.Parameters(@name,textbox.text);
Olarak SQL veri tabanındaki, gibi yamaya çalıştım ama olmadı
Arkadaşlar;
Entity framework kullanırsanız bence birçok derdinize deva olacaktır.
(select * from bart0630 where adisoyadi=’ “textbox1.text” ‘”,baglanticümlen);
Teşekkürler verdiğiniz bilgiler için
rica ederim.
bu kod calısıyor…
baglanti.Open();
OleDbDataAdapter adpliste = new OleDbDataAdapter("select * from olcum ", baglanti);
DataTable dt = new DataTable();
adpliste.Fill(dt);
baglanti.Close();
fakatt..
baglanti.Open();
OleDbDataAdapter adpliste = new OleDbDataAdapter("select * from olcum where olcumzamani>'"+dateTimepiker1.value+"' ", baglanti);
DataTable dt = new DataTable();
adpliste.Fill(dt);
baglanti.Close();
veri tipinde olcut uyusmazlıgı yada gırılen tıpte uyusmazlık diyor
tarih teki iki tane (') var strig olarak gordugunden olcum tablosundaki Date/Time tipine uymadıgını dusunuyorum ama
Çözümüm yok…:((
2 gundur projem takıldı kaldı
Bilen varsa yardım etsin Lütfen
@ baldanadam
"datetimepicker.value" yerine "datetimepicker.text" kullan..
ve dışarıda bir yerde datetimepicker ın text ini (seçilmiş tarihi) Convert.Todatetime ile bir değişkene ata sonra sorgunda kullan..
Küçük bir dipnot.. tarih ya da sayısal veriler kullanırken direk > yada < büyük işaretlerini kullanmak yerine ayarlama yapmak istediğiniz değerin bir altından <= yada >= kullanarak belirlemeniz özellikle win 7 ya da x64 kullanıcıları açısından alacağınız muhtemel saçma hataların önüne geçer.. (ben yedim o darbeyi)
örneğin 18 yaş ve üzeri için bir sorgu yapacaksanız " >18 " yerine " >=19 " kullanımı gibi..