ASP.NET CLASS KULLANARAK VERİTABANI İŞLEMLERİ 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. 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ı ve Class ımızı oluşturduktan sonra Solution Explorer kısmında bu eklediğimiz klasörleri görebiliyor olmamız lazım.
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ği Veri 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 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. 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 Select işlemlerinde işimize yarayacak bu fonksiyon belki de projelerimizde en çok kullanacağımız fonksiyon bu olacak. public DataTable DataTableGetir(string sql) 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; Esasında bu iki fonksiyon işimizi görür. Bu iki fonksiyon ile insert, update, delete ve select işlemlerimizi yapabiliriz. 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]; Bu fonksiyon ile DataTable ın sadece ilk satırını okuyoruz. 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" /> </div> insert.aspx.cs
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 görüldüğü gibi tek satırda insert olayını halletmiş oluyoruz.
Update İşlemi insert 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. Delete İşlemi bg.idu("delete from Kisiler Where KisiID=1"); Select İşlemi select.aspx <div> <asp:repeater ID="getir" runat="server"> <ItemTemplate> <%#Eval("KisiAdi") %> <br /> </ItemTemplate> </asp:repeater> </div> select.aspx.cs
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 select.aspx.cs kısmına da aşağıda ki gibi ilk satırı yazdıralım DataRow dr = bg.datarowgetir("select * From Kisiler"); ilk_satir.text = dr["kisiadi"].tostring(); Umarım faydalanabileceğiniz bir anlatım olmuştur örnek dosyayı Buradan indirebilirsiniz. Sorularınız olursa elimden geldiğince yanıtlamaya çalışırım.