CSharp-ile-Sql

http://www.rifatterzi.com
C Sharp Class ile Sql Bağlantısı ve Sorguları
Kullanımı
Merhaba, bu yazımda sizlere başlıkta da belirtmiş olduğum gibi C Sharp class yapısıyla Sql bağlantısı ve sorgualrının
nasıl yapılacağını ve bunların nerede kullanılabileceğiyle ilgili örnek vererek anlatmaya çalışacağım.
Lafı fazla uzatmadan örnek üzerinden öncelikle class yapımızı inceleyelim:
“veritabani.cs” adında bir class oluşturalım.
using
using
using
using
System;
System.Collections.Generic;
System.Linq;
System.Text;
namespace sqlDataBase
{
public class veritabani
{
/* Sql bağlantısı için gerekli olan sınıfımızı tanımlıyoruz. */
private SqlConnection con;
/* baglan() adında bir fonksiyon ile sql bağlantımızı gerçekleştireceğimiz bir fonksiyon
oluşturmuş oluyoruz. */
private SqlConnection baglan()
{
/* Sql bağlantı cümlemiz. Sql Connection String olarak ifade edilir. */
con = new SqlConnection("Data Source=RIFATTERZI;Initial Catalog=sqlDllDeneme;Integrated
Security=True");
try
{
/* Sql bağlantımızı başlatan fonksiyonu çağırıyoruz. */
con.Open();
}
catch
{
//Hata
}
return con;
}
/* islemYap() fonksiyonumuzla database işlemlerini yaptıracağız.
* Fonksiyonumuz sql adında bir string ifade alarak çalışacaktır.
* Bu fonksiyon SqlCommand tipinde bir değer döndürecektir. */
public SqlCommand islemYap(string sql)
{
/* Bir SqlCommand yani komut oluşturuyoruz.
* İçerisine fonksiyonumuzu çağırdığımızda gönderdiğimiz sql satırımız(insert, updade
gibi)
* ve baglan() yani işlemi yapacağımız veri tabanımızı ekliyoruz. */
SqlCommand com = new SqlCommand(sql, baglan());
/* Bu satırda ise komutumuzu çalıştırıyoruz.
* İşlem yukarda değil bu satırda gerçekleşmektedir. */
com.ExecuteNonQuery();
/* Burada da SqlCommandımızı fonksiyonumuzu çağırdığımız yere gönderiyoruz. */
return com;
}
/* Burada veritabanımızda bulunan tablolarımızdan satır çekme işlemini yapıyoruz.
* Burada da yukarıdaki fonksiyonumuz gibi sql adında bir string alarak işlem yapıyoruz.
* Geriye döndüreceğimiz değer ise DataRow olacak. */
public DataRow satirCek(string sql)
http://www.rifatterzi.com
{
/* Bir SqlDataAdapter oluşturuyoruz. */
SqlDataAdapter adap = new SqlDataAdapter(sql, baglan());
/* Ardından bir DataSet oluşturup
* SqlDataAdapter nesnemizi DataSetimize yerleştiriyoruz. */
DataSet ds = new DataSet();
adap.Fill(ds);
/* Burada ise DataSet içerinindeki ilk tablomuzun ilk satırını geri döndürüyoruz. */
return ds.Tables[0].Rows[0];
}
/* Burada veri tabanımızdak ibilgileri tablo şeklinde çekiyoruz.
* Burada da sql adında bir sorgu cümlesi alıyoruz.
* Geriye DataTable döndürüyoruz. */
public DataTable tabloCek(string sql)
{
/* Yukarıdaki şekilde SqlDataAdapter ve DataSetlerimizi oluşturup dolduruyoruz. */
SqlDataAdapter adap = new SqlDataAdapter(sql, baglan());
DataSet ds = new DataSet();
adap.Fill(ds);
/* Burada yukarıdaki satır döndürme fonksiyonumuzdan faklı oalrak
* bu sefer satırı değil de DataSet içerisindeki ilk tabloyu geri döndürüyoruz. */
return ds.Tables[0];
}
/* return işlemlerimizden sonra kapatma işlemimizi yapamadığımızdan dolayı
* kapat adında bir fonksiyon tanımlayarak açmış olduğumuz veri tabanımızı
* kapatma işlemimizi yapacağız. */
public SqlConnection kapat()
{
try
{
/* Bağlantımızı kapatacak fonksiyonu çağırıyoruz. */
con.Close();
}
catch
{
//Hata
}
return con;
}
/* Not: Burada ben kapat() foknsiyonumuzu dışarıdan çağıracak şekilde yaptım fakat sizler
* benim gibi yapmayıp isterseniz burada fonksiyonları private yaparak public yeni
fonksiyonlar tanımlayıp
* bu fonksiyonlarda kapatma işlemini de gerçekleştirebilirsiniz. */
}
}
http://www.rifatterzi.com
Class yapımızı oluşturduğumuza göre artık veri tabanımızda bu class ile işlem yapabiliriz.
Uygulamamıza Geçip class ile işlemlerimizi yapalım: “frmDeneme” adında bir form oluşturalım.
Şekil 1 : Form Ekran Çıktısı
using
using
using
using
using
using
using
using
using
System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Data.SqlClient;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;
namespace sqlDataBase
{
public partial class frmDeneme : Form
{
public frmDeneme()
{
InitializeComponent();
}
/* Burada class ile bir nesne oluşruyoruz.
* int secildi_id = -1; ise tabloda seçilen kişinin id değerini alacak değişkenimiz.
* -1 verilmesi ise henüz seçilmediğini belirleyebilmemizi sağlayacak. */
veritabani sql = new veritabani(); int secili_id = -1;
private void frmDeneme_Load(object sender, EventArgs e)
{
/* Uygulamamız ilk açıldığında tabloyu doldur fonksiyonumuzu çağırıyoruz. */
tabloyu_doldur();
}
/* tabloyu_doldur() fonksiyonumuz formumuzda bulunan
* dtAdSoyad(dataGridwiev) nesnemizi dolduracak fonksiyondur.
* fonksiyon olarak yazılmasının sebebi birden fazla yerde kullanılacak olmasıdır. */
private void tabloyu_doldur()
{
/* Öncelikle biraz try{}, catch{} ve fianlly{} bölümlerinden bahsedeyim.
* try{} bölümü işlemlerin yapıldığı hata ayıklama bölümüdür.
* catch{} bölümü hatanın yakalandığında kullanılan bölümdür ve
* (SqlException sqlEx) ise yakalanan hatanın sqlEx 'e atılmasını sağlar.
* bu sayede sqlEx.Message ile verilen hatayı alabiliriz.
http://www.rifatterzi.com
* finally{} bölümü ise try{} catch{} işleminin bitiminde çalışan bölümdür.
* Bubölüm her durumda çalışır. Bu yüzden veritabanımızıda burada kapatıyoruz. */
try
{
/* Class içerisinde yazmış olduğumuz tabloCek(string sql) fonksiyonumuzu
* çağırıp tablomuzu çekiyoruz ve dtAdSoyad(dataGrid) tablomuzun içerisine
* çektiğimiz tabloyu yerleştiriyoruz.
* sql.tabloCek yazmamızın nedeni ise class yapımızı sql yukarıda adında
* projemize dahil etmemizdir. */
dtAdSoad.DataSource = sql.tabloCek("select * from tblKisi");
}
catch (SqlException sqlEx)
{
/* Hatayı ekrana bastırıyoruz. */
MessageBox.Show(sqlEx.Message);
}
finally
{
sql.kapat();
}
/* Tablomuzu yenileme ihtiyacı duyduğumuzda formumuzu da boşaltmamız gerekir.
* Eski bilgilerin formda durması pek mantıklı değildir. Bu sebeple form_temizle()
* fonksiyonumuzu çağırıp formumuzu temizliyoruz. */
form_temizle();
}
/* Kaydet butonu tıklandığı zaman yapılacak işlemler. */
private void btnKaydet_Click(object sender, EventArgs e)
{
try
{
/* Bir veri eklemek için islemYap(string sql) fonksiyonumuzu kullanacağız.
* Bu fonksiyonu aşağıdaki gibi sorgumuzu içerisine yerleştirdiğimizde class
* içerisinde yazmış olduğumuz fonksiyon kişiyi eklemiş olacaktır. */
sql.islemYap("insert into tblKisi values('" + txtAd.Text + "','" + txtSoyad.Text +
"')");
}
catch (SqlException sqlEx)
{
MessageBox.Show(sqlEx.Message);
}
finally
{
sql.kapat();
}
/* Tablomuzda artık bir kişi daha var ve bu kişiyi görebilmek için
* tablomuzu yeniden dolduruyoruz. */
tabloyu_doldur();
}
private void btnGuncelle_Click(object sender, EventArgs e)
{
/* Eğer tablomuzdan bir kişi seçilmediyse diye kontrol ediyoruz
* Seçilmemişse mesaj verip işlem yapmadan çıkıyoruz. */
if (secili_id < 0)
{
MessageBox.Show("Lütfen bir kullanıcı seçiniz.", "Hata!");
return;
}
try
{
sql.islemYap("update tblKisi set ad='" + txtAd.Text + "',soyad='" + txtSoyad.Text +
"' where id="+secili_id);
http://www.rifatterzi.com
}
catch (SqlException sqlEx)
{
MessageBox.Show(sqlEx.Message);
}
finally
{
sql.kapat();
}
tabloyu_doldur();
}
private void btnSil_Click(object sender, EventArgs e)
{
if (secili_id < 0)
{
MessageBox.Show("Lütfen bir kullanıcı seçiniz.", "Hata!");
return;
}
try
{
sql.islemYap("delete from tblKisi where id="+secili_id);
}
catch (SqlException sqlEx)
{
MessageBox.Show(sqlEx.Message);
}
finally
{
sql.kapat();
}
tabloyu_doldur();
}
/* dtAdSoyad(dataGrid) eventlerimizden CellClick Eventimizin içerisine yani
* tabloda bir hücre seçtiğimiz zaman gerçekleşecek olayda yapacaklarımızı
* buraya yazıyoruz. */
private void dtAdSoad_CellClick(object sender, DataGridViewCellEventArgs e)
{
/* (int) integer değere dönüştürmeye yarar.
* CurrentRow Seçili satırı verir.
* Cells["id"] ile id sütununu alırsınız.
* Value ise bize değeri verir.
* Kısaca seçili satırdaki id değerini al diyoruz.
* Başta yazdığımız (int) ile de bu değeri integer olarak alıyoruz.*/
secili_id = (int)dtAdSoad.CurrentRow.Cells["id"].Value;
/* Burada değişik oalrak (int) yerine sonda gelen ToString() var.
* Bu ise değeri string olarak almamıza yaramaktadır. */
txtAd.Text = dtAdSoad.CurrentRow.Cells["ad"].Value.ToString();
txtSoyad.Text = dtAdSoad.CurrentRow.Cells["soyad"].Value.ToString();
/* Eğer bir kişi seçildiyse alttaki alana bu kişinin istediğimiz
* bilgisini yazdıralım. */
if (secili_id>-1)
{
/* Burada da son fonksiyonumuz olan
* satirCek(string sql) fonksiyonumuzu kullanacağız.
* burada dikkat çeken özellik fonksiyonsonunda bulunan ["ad"] kısmıdır.
* burada çektiğimiz satırın hangi sütünundaki değeri alacağımızı yazıyoruz.
* ["ad"] yazan yerde sorgumda belirttiğim id'ye sahip kişinin adını bana
verecektir. */
lblSeciliKisi.Text = "Datagrid'de şuanda seçili olan kişi: " +
http://www.rifatterzi.com
sql.satirCek("select * from tblKisi where
id="+secili_id)["ad"].ToString() + " " +
sql.satirCek("select * from tblKisi where
id="+secili_id)["soyad"].ToString();
}
}
/* Ekranımızdaki formumuzu temizler. */
private void form_temizle()
{
/* txtAd.Clear() txtAd yazı kutumuzun içerisini temizler. */
txtAd.Clear(); txtSoyad.Clear();
}
/* Not: Temel c#(CSharp) kurallarını bildiğiniz var sayılarak hazırlanmış bir anlatımdır.
* http://www.rifatterzi.com */
}
}
Yararlı olması dileğiyle, kolay gelsin.