Asp.Net - Class Kullanarak Veritabanı İşlemlerini Yönetmek (Access İçin)

Asp.NET mimarisinin temelini oluşturan CLASS yapısını kullanarak veri tabanı işlemlerini nasıl daha az kodla ve daha stabil yapabiliriz bunu göreceğiz.
Mevzu ilk etapta karışık gibi görünse de projelerinizde bu yapıyı kullanmaya başladığınızda esasında işinizi ne kadar kolaylaştırdığını ve veri tabanı işlemlerini ne kadar hızlı yaptığınızı göreceksiniz.
Veri tabanı ve Class ımızı oluşturduktan sonra Solution Explorer kısmında bu eklediğimiz klasörleri görebiliyor olmamız lazım.
bu 3 namespace i ekliyoruz. Ben Access ile çalıştığım için OleDb namespace ini ekledim siz veritabanına göre namespace i değiştirebilirsiniz.
Class ımıza web.config dosyasında tanımladığımızı veri tabanı bağlantısını tanımlıyoruz.
Select işlemlerinde işimize yarayacak bu fonksiyon belki de projelerimizde en çok kullanacağımız fonksiyon bu olacak.
public DataTable DataTableGetir(string sql)
Esasında bu iki fonksiyon işimizi görür. Bu iki fonksiyon ile insert, update, delete ve select işlemlerimizi yapabiliriz.

Bu fonksiyon ile DataTable ın sadece ilk satırını okuyoruz.
insert.aspx.cs
görüldüğü gibi tek satırda insert olayını halletmiş oluyoruz.


Delete İşlemi
bg.idu(
"Delete from Kisiler Where KisiID=1");
Select İşlemi
select.aspx
<div>
select.aspx.cs
select.aspx.cs kısmına da aşağıda ki gibi ilk satırı yazdıralım
Ben örneği Access veri tabanı üzerinden yapacağım ama mantığı anladığınız takdirde zaten bütün veri tabanları için yapılacak işlemler aynı.
Hikayemizde kişileri kaydettiğimiz bir listesi olsun. Listede Kişi Adı, Telefonu, Email adresi olsun.
Öncelikle veri tabanımızı oluşturalım ben veri tabanına “classDB” adını vereceğim. Veri tabanını oluşturduktan sonra “Kişiler” adında bir tablo oluşturalım. Tablonun elemanlarının “KisiID”,” KisiAdi”, “KisiTel” ve ”KisiEmail” olduğunu varsayalım.
Veri tabanını Projeye Ekleme
Oluşturduğumuz Web sitemize ekleyebilmek için bir App_Data klasörüne ihtiyacımız var. Bu klasörü proje adımıza sağ tıklayarak Add > Add ASP.NET Folder > App_Data yolunu izleyerek ekleyebiliriz.
App_Data klasörünü ekledikten sonra içine classDB (Ben classDB vermiştim) isimli veri tabanını atıyoruz.
Veri tabanıyla olan işimiz bitti.
Şimdi bu veri tabanı üzerinde işlem yapmamızı sağlayacak Select, insert,update ve delete işlemlerini yapmamızı sağlayacak olan class ımızı oluşturacağız.
Class ın Oluşturulması
Asp.NET class ları App_Code klasörünün içinde tutuyor. O bakımdan ilk önce bu dosyayı oluşturuyoruz. Yukarıda App_Data klasörü ile aynı adımları izleyerek (Add > Add ASP.NET Folder > App_Class ) dosyamızı ekliyoruz.
App_Code dosyasını ekledikten sonra bu dosyaya sağ tıkjlıyoruz ve Add > Add New Items… yolunu izleyoruz.
Açılan pencereden Class öğesini seçiyoruz Add butonuna tıklamadan önce Class ımıza bir isim veriyoruz ben “Baglantim.cs” dedim.Artık Class ımızı kodları yazmak için hazır.

Veri  Tabanının BağlanmasıApp_Data içine koyduğumuz veri tabanı üzerinde çalışabilmemiz için projemize dahil etmemiz gerekmektedir. Bunun çeşitli yolları vardır. Ben genellikle veri tabanını web.config dosyası üzerinden bağlıyorum ama siz isterseniz oluşturduğumuz Baglantim.cs içinden de bu bağlantıyı yapabilirsiniz.
Web.config içine 

“<connectionStrings>
<add name="baglanti" connectionString="Provider=Microsoft.jet.OLEDB.4.0 ;Data Source=|DataDirectory|\ClassDB.mdb" providerName="System.Data.OleDb"/>
</connectionStrings>”

Şeklinde bağlantımızı tanımlıyoruz.
Class Dosyasının İçeriğiVeri tabanını bağladıktan sonra sıra class ımızı yazmaya geldi. Öncelikle clasımıza

using
 System.Data;
using System.Data.OleDb;
using System.Web.Configuration; // web.config içindeki bağlantıyı alacak
public OleDbConnection baglan()
  { string bag_str= WebConfigurationManager.ConnectionStrings["baglanti"].ConnectionString;
        OleDbConnection baglanti = new OleDbConnection(bag_str);
        baglanti.Open(); // baglanti connection açıyoruz
        return (baglanti); //baglanti connection döndürüyoruz
    }
Kafa karıştırmamak için çok fazla detaya girmeyeceğim sadece burada oluşturduğumuz public nesnesinin proje boyunca ihtiyacımız olacak veri tabanı bağlantısını gerçekleştirecek olmasını bilin yeter.
İnsert, Delete,Update İşlemleri için Fonksiyonun OluşturulmasıBu işlemleri yapmak için ayrı ayrı fonksiyonlar oluşturmamıza gerek yok. Yazdığımız sorguyu okuyacak ve ona göre bize döndürecek bir fonksiyon bu aşamada işimizi fazlasıyla görecektir.
public int idu(string sqlcumle)
    {
        OleDbConnection baglan = this.baglan();
        OleDbCommand sorgu = new OleDbCommand(sqlcumle, baglan);
        int sonuc = 0;
        try
        {            sonuc = sorgu.ExecuteNonQuery();
        }
        catch (OleDbException ex)
        {            throw new Exception(ex.Message);
        }
        sorgu.Dispose();
        baglan.Close();
        baglan.Dispose();
        return (sonuc);
    }
DataTable ile İşlem Yapmak için Fonksiyonu Oluşturalım
    {   OleDbConnection baglan = this.baglan();
        OleDbDataAdapter adapter = new OleDbDataAdapter(sql, baglan);
        DataTable dt = new DataTable();
        try
        {
            adapter.Fill(dt);
        }
        catch (OleDbException ex)
        {

            throw new Exception(ex.Message);
        }
        adapter.Dispose();
        baglan.Close();
        baglan.Dispose();
        return dt;
    }
Fakat yazılım yaparken her zaman “eğer aynı işi daha az kodla yapabiliyorsan, daha az kodla yap” felsefesi işler.
Bura da fonksiyonlarımıza bir yenisini daha ekleyip “DataTableGetir” fonksiyonuyla içini doldurduğumuz DataTable ın sadece ilk satırını alacağız. Zaten çoğu select cümlesi sadece ilk satır için yapılmıyor mu?public DataRow DataRowGetir(string sql)
    {   DataTable tablo = DataTableGetir(sql);
        if (tablo.Rows.Count == 0) return null;
        return tablo.Rows[0];
    }
FONKSİYONUN KULLANILMASIŞimdi sıra geldi hazırlamış olduğumuz fonksiyonu kullanmaya.  Öncelikle Fonksiyonu kullanacağımız .cs sayfasının namespace lerine “using System.Data;” yı ekliyoruz ve fonksiyonumuzu aşağıdaki gibi çağırıyoruz.
using System.Data; //namespace i ekliyoruz
public partial class _Default : System.Web.UI.Page
{    Baglantim bg = new Baglantim(); //Fonksiyonumuzu çağırıyoruz
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}
İnsert İşlemi
İnsert.aspx
        <asp:TextBox ID="Kisi_Adi" runat="server"></asp:TextBox>
        <asp:TextBox ID="Kisi_Tel" runat="server"></asp:TextBox>
        <asp:TextBox ID="Kisi_Email" runat="server"></asp:TextBox>
 <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data; //mutlaka ekliyoruz
public partial class insert : System.Web.UI.Page
{
    Baglantim bg = new Baglantim(); // Fonksiyonumuzu çağırıyoruz
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string adi = Kisi_Adi.Text.ToString();
        string email = Kisi_Email.Text.ToString();
        string tel = Kisi_Tel.Text.ToString();
        bg.idu("insert into Kisiler (KisiAdi,KisiTel,KisiEmail) Values ('"+adi+"', '"+tel+"', '"+email+"')"); // insert cümlemiz
    }
}
Update İşlemiinsert işleminin aynısı sadece insert cümlesi yerine update cümlesi yazıyoruz
bg.idu("Update Kisiler SET KisiAdi='"+adi+"', KisiTel='"+tel+"',KisiEmail='"+email+"' where KisiID=1");
Burada siz where KisiID kısmını nasıl isterseniz öyle düzenleyebilirsiniz. Ben 1 numaralı ID deki kişiyi update ettim.
        <asp:Repeater ID="getir" runat="server">
            <ItemTemplate>
                <%#Eval("KisiAdi") %> <br />
            </ItemTemplate>
        </asp:Repeater>
    </div>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class Select : System.Web.UI.Page
{    Baglantim bg = new Baglantim(); // Fonksiyonu çağırıyoruz
    protected void Page_Load(object sender, EventArgs e)
    {
    DataTable dt = bg.DataTableGetir("Select * From Kisiler"); // select cümlesi
        this.getir.DataSource = dt;
        this.getir.DataBind();
    }
}
DataTable ımızı tek satır kod ile doldura biliyoruz.
Peki sadece ilk satıra ihtiyacımız olsaydı
Select.aspx sayfasında  
</asp:Repeater> den sonra bir label ekleyelim ve ID sine ilk_satir diyelim<asp:Label ID="ilk_satir" runat="server" Text="Label"></asp:Label>
// bu şekilde
DataRow dr = bg.DataRowGetir("Select * From Kisiler");
ilk_satir.Text = dr["KisiAdi"].ToString();

Yorumlar

Bu blogdaki popüler yayınlar

Asp.Net ile Uyarı Mesajları Vermek (msgbox)

Asp.Net ile T.C. Kimlik Doğrulama (Mernis) Web Service ile

Asp.Net Eval Kullanımı