Müdavim Girişi

E-Posta
Parola

Ücretsiz Kayıt Ol


Online Müdavimler (0 Kişi)
  • Online Kişi Bulunmadı

Yazar Hakkında
x
İsmail Kocacan
İsmail Kocacan is experienced on many development platforms and continues to learn technologies. Since the age of 16-17, dealing with software technologies. And continuous learning, teaching, research, continues to develop.
VeriTabanı Uygulaması Geliştiriyoruz Hadi hayırlısı

 Merhaba arkadaslar;

Bu makalemizde sizlere C# ile Windows VeriTabani uygulamasi gelistirirken dikkat edilmesi gerekenlerden bahsedicem. Normalde Web uygulamalari gelistirirken söyle bir yöntem izlenir. VeriTabanina baglanirsiniz sorgulari isletirsiniz ve baglantiyi kapatirsiniz.

Çünkü gelistirdiginiz web uygulamasina o anda baglanti kuran bir sürü kullanici olabilir.
Yani Web uygulamalarina baglanti duragan olamiyor.
 
 
Ama bu olay Windows Form uygulamarinda(Windows Form Application) farklidir. Nasildir ya o zaman? Yazdiginiz Program çalistiginda veritabanina otomatik baglanir. Veya Kullanici istegi dogrultusunda istedigi veritabanina baglanmak ister. Ondan sonra iste kayit ekler, siler, degistirir listeler falan filan iste bu esnada hep baglanti açiktir. Taa ki ne zaman kapanir bu baglanti? Program kapandiginda otomatik olarak veritabani baglantisi kesilir. Veya Programi kullanan eleman kendi bilerek, kasti baglantiyi kapatir.
 
 
Kisacasi sudur;
Program çalistikça veritabanina bagli kalir(Özel bir durum yoksa). Programi kapattiginizda veritabani baglantisi kesilir.
 
 
Yukarida anlattiklarimi C# dili uygulamaya baslayalim simdi.
Öncelikle sunu yapmam gerekiyor. Windows Form Uygulamama bir Class ekliyorum. Adina DM ismini veriyorum. Benim Delphide DataModullere verdigim bir isim aliskanligi.
Siz Classin adini Ayse, Fatma olarak da verebilirsiniz.
 
 
Bu DM classi içersindeki tüm nesneleri methodlari, özellikleri static olarak tanimliyorum.
Nedenmi? DM Classindan bir instance(örnek) olusturmadan, direk class adinini yazip içersindeki nesnelere, methodlara, özelliklere erisebilmek için.
 
Egerki Methodlara, Özelliklere, degiskenlere static özellik kazandirmazsam Direk class üzerinden classin özelliklerine, methodlarina vs erisemem. Ancaksin o classdan yeni bir örnek(instance) olusturup, o instance üzerinden erisebilirim. Ki bu yanlis bir yöntem. Çünkü her yeni instance içersinde yeniden veritabanina baglanma olayi gerçeklesecek ki biz bundan kurtulmak istiyoruz. Direk Class üzerinden, hiç yeni bir instance olusturmadan içersindeki methodlari çagirip, özelliklerini, degiskenlerinin degerlerini okuyup degistirmek istiyoruz.
 
 
 
Çok fazla hikâye anlatmadan kodlamaya baslayalim.
Öncelikle sunu yapiyoruz.
Bir adet projemize Application Configuration File ekliyoruz.ve içerigini asagidaki gibi düzenliyoruz.
App.Config
<?xmlversion="1.0"encoding="utf-8" ?>
<configuration>
 <connectionStrings>
    <addname="baglantidizesi"connectionString="server=.\SQLExpress; Database=VTApp; integrated security=sspi"/>
 </connectionStrings>
</configuration>
 
 DM.cs
using System.Data;
using System.Configuration;
using System.Data.SqlClient;
 
namespace WindowsVeriTabaniUygulamasi
{
   public class DM
    {
       public static SqlConnection Baglanti = new SqlConnection(ConfigurationManager.ConnectionStrings["baglantidizesi"].ConnectionString);
 
       public static void OpenDB()
       {
           if (Baglanti != null) Baglanti.Open();
       }
 
 
       public static void CloseDB()
       {
           if (Baglanti != null) Baglanti.Close();
       }
 
 
       public static string GetConnectionState()
       {
           string result=string.Empty;
           if (Baglanti != null)
           {
               switch (Baglanti.State)
               {
                   case ConnectionState.Broken: result = "Broken";
                       break;
                   case ConnectionState.Closed: result = "Connecting";
                       break;
                   case ConnectionState.Connecting: result = "Baglaniyor";
                       break;
                   case ConnectionState.Executing: result = "Executing";
                       break;
                   case ConnectionState.Fetching: result = "Fetching";
                       break;
                   case ConnectionState.Open: result = "Open";
                       break;
               }
           
           }
           return result;
       }
    }
}
 
 
 Program.cs
using System;
using System.Windows.Forms;
 
namespace WindowsVeriTabaniUygulamasi
{
    static class Program
    {
        [STAThread]
        static void Main()
        {
            // Program Çalistiginda VeriTabani Baglantisi açiliyor
            DM.OpenDB();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
           
        }
    }
}
 
Form1.cs
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
 
namespace WindowsVeriTabaniUygulamasi
{
    public partial class Form1 : Form
    {
 
        public Form1()
        {
            InitializeComponent();
        }
 
        public void Listele()
        {
            using (var dt = new DataTable())
            {
                using (var cmd = new SqlCommand())
                {
                    cmd.Connection = DM.Baglanti;
                    cmd.CommandText = "SELECT * FROM ISIMLER";
                    dt.Load(cmd.ExecuteReader());
                }
                dataGridView1.DataSource = dt.DefaultView;
            }
        }
 
 
        private void btnListele_Click(object sender, EventArgs e)
        {
            this.Listele();
        }
 
 
        //INSERT(KAYDET)
        private void btnKaydet_Click(object sender, EventArgs e)
        {
            using (var cmd = new SqlCommand())
            {
                cmd.Connection = DM.Baglanti;
                cmd.CommandText = "INSERT INTO ISIMLER(AD,SOYAD) VALUES (@AD,@SOYAD)";
                cmd.Parameters.AddWithValue("@AD", txtAD.Text.Trim());
                cmd.Parameters.AddWithValue("@SOYAD", txtSOYAD.Text.Trim());
                cmd.ExecuteNonQuery();
                this.Temizle();
            }
            this.Listele();
        }
 
 
        private void Temizle()
        {
            foreach (Control Nesne in this.Controls)
            {
                if (Nesne.GetType().FullName == "System.Windows.Forms.TextBox")
                    Nesne.Text = string.Empty;
            }
        }
 
 
        //DELETE(SIL)
        private void btnSil_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bak Siliyorum Ha ?", "dikkat!", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
            {
                int RID = int.Parse(dataGridView1.CurrentRow.Cells["RID"].Value.ToString());
                using (var cmd = new SqlCommand())
                {
                    cmd.Connection = DM.Baglanti;
                    cmd.CommandText = "DELETE FROM ISIMLER WHERE RID=@RID";
                    cmd.Parameters.AddWithValue("@RID", RID);
                    cmd.ExecuteNonQuery();
                    dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
                }
            }
        }
 
 
 
        private void btnDefolupGidiyorum_Click(object sender, EventArgs e)
        {
            DM.CloseDB();
            Application.Exit();
        }
 
 
 
 
        private void dataGridView1_DoubleClick(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentRow != null)
            {
                txtAD.Focus();
                txtRID.Text = dataGridView1.CurrentRow.Cells["RID"].Value.ToString();
                txtAD.Text = dataGridView1.CurrentRow.Cells["AD"].Value.ToString();
                txtSOYAD.Text = dataGridView1.CurrentRow.Cells["SOYAD"].Value.ToString();
            }
        }
 
 
 
        //UPDATE(GÜNCELLE)
        private void btnDegistir_Click(object sender, EventArgs e)
        {
            if (dataGridView1.CurrentRow != null)
            {
                int RID = int.Parse(dataGridView1.CurrentRow.Cells["RID"].Value.ToString());
                using (var cmd = new SqlCommand())
                {
                    cmd.Connection = DM.Baglanti;
                    cmd.CommandText = "UPDATE ISIMLER SET AD=@AD,SOYAD=@SOYAD WHERE RID=@RID";
                    cmd.Parameters.AddWithValue("@RID", RID);
                    cmd.Parameters.AddWithValue("@SOYAD", txtAD.Text.Trim());
                    cmd.Parameters.AddWithValue("@AD", txtSOYAD.Text.Trim());
                    cmd.ExecuteNonQuery();
 
                    dataGridView1.CurrentRow.Cells["AD"].Value = txtAD.Text.Trim();
                    dataGridView1.CurrentRow.Cells["SOYAD"].Value = txtSOYAD.Text.Trim();
                }
            }
        }
 
        //Her saniye Baglanti durumu yazdiriliyor
        private void timer1_Tick(object sender, EventArgs e)
        {
            durumx.Text = DM.GetConnectionState();
        }
    }
}
 

 Uygulamanin Çalistir Vaziyeti

Uygulamaya ait Kaynak Kodlari Buradan indirebilirsiniz.Içersinde VeriTabani Scripti var.
Uygulamayi test etmek için VeriTabanini olusturup,App.Config dosyasini kendi ayarlariniza göre düzenledikten sonra deh demek kaliyor
Umuyorum anlatmak istedigimi anlatabilmisimdir

ismailkocacan@gmail.com
Ismail Kocacan (Yazilimci Bozuntusu)


Kategori : Yazılım Tasarımı | 09.11.2010 14:50:00  | 3077 defa okundu  | 0 Yorum |

Yazara Ait Diğer Makaleler(51) Makaleye Yapılan Yorumlar İlk yorum yazan siz olun
Ara
 
Anket
Hangi VeriTabanı Yönetim Sistemini Kullanıyorsunuz ?