Ana Sayfa » Ders Notları ve Örnekler » ASP.NET » Tek Sayfada Veritabanı İşlemleri - Listeleme, Ekleme, Değiştirme ve Silme

Uyarılar :
  • Bu sayfada yazılanlar yeniden yayınlanamaz.
  • Bu örnek ders sırasındaki anlatımlardan derlenmiştir. Özellikle bir makale şeklinde yazılmamıştır. Bilgilerde eksiklikler bulunabilir.
  • Örnek, tek bir sayfada, bir tablo üzerinde yapılabilecek en temel veritabanı işlemleri olan kayıt listeleme, yeni kayıt ekleme, kayıt değiştirme ve kayıt silme işlemlerinin en alt seviyede ve süratli biçimde nasıl gerçekleştirileceğini göstermek için hazırlanmıştır. Yeni başlayanlara faydalı olması dileğiyle sizlerin kullanımına sunulmaktadır.
  • Örneğin başındaki fikir hakkı beyanı metninin aynen tutulması şartıyla aynen veya geliştirilerek kullanılabilir.
  • Bu örneği kullanabilmek için, web sitenizin (site klasörünüzün) ana dizininde App_Data isimli bir klasör ve bu klasörde Ogrenciler.mdf isimli bir MS SQL Server veritabanı dosyası bulunmalı, veritabanı dosyası içinde aşağıda yapısı gösterilen; birincil anahtar olarak "Kimlik" ve "Adi", "Soyadi" ve "OkulNo" isimli alanları içeren "Ogrenciler" isimli bir tablo bulunmalıdır. Page_Load yordamında bulunan bağlantı nesnesi oluştururken kullanılan satırdaki veritabanı mutlak yolunu kendinizinkiyle değiştirin.


    "Ogrenciler" tablosunun yapısı.

  • Baglanti dizesindeki "(LocalDB)\v11.0;", sizin makinenizdeki SQL Server örnek adıyla değiştirilmelidir.
  • Veritabanı erişim sınıfları burada anlatılmayacağından bu örneği incelemeden önce veritabanı erişim sınıflarının kullanıldığı kayıt listeleme gibi örnekleri inceleyin.
  • Sayfanın güvenliğini arttırmak ve daha profesyonel bir sayfa olmasını sağlamak için, Sayfa İçi Hata Yakalama - Page_Error Olayı ve Olay Günlüğü örneğindeki sayfa içi hata kontrolü ve olay günlüğü özellikleri ile Validator (Doğrulayıcı) Kontrolleri İle Veri Geçerliliğini Sınama örneğinde açıklanan veri doğrulayıcıları sayfaya ekleyebilirsiniz.

Örnek :

<!--
   © Ercan ORAK - 2013

   Özgün hali Ercan ORAK tarafından yazılmıştır.
    
   Bu notu buradan kaldırmamak şartıyla aynen veya geliştirilerek
   kullanılabilir, tekrar yayınlanamaz. Kodun düzgün, hatasız
   çalışması ile ilgili hiç bir garanti verilmez. Kullanımdan
   doğabilecek riskler tamamen kullanana aittir. Yazan ve 
   yayınlayanlar bundan sorumlu tutulamaz.
     
-->

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>

<!DOCTYPE html>
<script runat="server">
    
    SqlConnection baglanti;
    
    void Page_Load(Object o, EventArgs e)
    {
        baglanti = new SqlConnection();
        baglanti.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=" +
                                    Server.MapPath("~/App_Data/Ogrenciler.mdf") +
                                    ";Integrated Security=True;Connect Timeout=30";
        baglanti.Open();
        if (!Page.IsPostBack) listele();
    }
    
    void Page_Unload(Object o, EventArgs e)
    {
        baglanti.Close();
    }
    
    void listele()
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM Ogrenciler", baglanti);
        rptOgrenciler.DataSource = cmd.ExecuteReader();
        rptOgrenciler.DataBind();
    }

    protected void rptOgrenciler_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Button silmeTusu = (Button)e.Item.FindControl("btnSil");
        Button degistirmeTusu = (Button)e.Item.FindControl("btnDegistir");
        int kimlik = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "Kimlik"));
        silmeTusu.CommandArgument = kimlik.ToString();
        degistirmeTusu.CommandArgument = kimlik.ToString();
    }

    void silmeTusu_Command(object o, CommandEventArgs e)
    {
        SqlCommand cmd = new SqlCommand("DELETE Ogrenciler WHERE Kimlik = @Kimlik", baglanti);
        cmd.Parameters.Add("@Kimlik", SqlDbType.Int).Value =
                                      Convert.ToInt32(((Button)o).CommandArgument);
        try
        {
            cmd.ExecuteNonQuery();
            listele();
            lbMesaj.Text = "Kayıt silindi...";
            
        }
        catch
        {
            lbMesaj.Text = "Kayıt şu anda silinemedi. Lütfen daha sonra tekrar deneyin...";

        }
        cmd.Dispose();
    }
    void degistirmeTusu_Command(object o, CommandEventArgs e)
    {
        kaydiGoruntule(Convert.ToInt32(((Button)o).CommandArgument));
    }

    void kaydiGoruntule(int kimlik)
    {
        SqlCommand cmd = new SqlCommand("SELECT * FROM Ogrenciler WHERE Kimlik = @Kimlik", baglanti);
        cmd.Parameters.Add("@Kimlik", SqlDbType.Int).Value = kimlik;
        SqlDataReader rdr = cmd.ExecuteReader();
        if (rdr.Read())
        {
            formAcKapa(true);
            lbFormBaslik.Text = "Öğrenci Kaydı Değiştirme";
            hfKimlik.Value = rdr["Kimlik"].ToString();
            tbOkulNo.Text = rdr["OkulNo"].ToString();
            tbAdi.Text = rdr["Adi"].ToString();
            tbSoyadi.Text = rdr["Soyadi"].ToString();
        }
        else lbMesaj.Text = "Kayıt bulunamadı...";
        rdr.Close();
    }

    protected void btnKaydet_Click(object sender, EventArgs e)
    {
        if (veriKontrol())
            kaydet();
        else
            lbMesaj.Text = "Tüm alanlar girilmeli, okul no alanı bir sayı olmalıdır...";
    }
    protected bool veriKontrol()
    {
        if (tbAdi.Text.Length < 2) return false;
        if (tbSoyadi.Text.Length < 2) return false;
        int kontrolNo = 0;
        if (!Int32.TryParse(tbOkulNo.Text, out kontrolNo) || kontrolNo < 1) return false;
        if (!Int32.TryParse(hfKimlik.Value, out kontrolNo) || kontrolNo < 1) return false;
        return true;
    }
    protected void kaydet()
    {
        int kimlik = Convert.ToInt32(hfKimlik.Value);
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = baglanti;
        
        if (kimlik == 0) // Yeni kayıt
        {
            cmd.CommandText =
                "INSERT INTO Ogrenciler (OkulNo, Adi, Soyadi) VALUES (@OkulNo, @Adi, @Soyadi)";
        }
        else
        {
            cmd.CommandText =
                "UPDATE Ogrenciler SET OkulNo = @OkulNo, Adi = @Adi, Soyadi = @Soyadi WHERE Kimlik = @Kimlik";
        }
        cmd.Parameters.Add("@OkulNo", SqlDbType.Int).Value =
                                                    Convert.ToInt32(tbOkulNo.Text);
        cmd.Parameters.Add("@Adi", SqlDbType.NVarChar).Value = tbAdi.Text;
        cmd.Parameters.Add("@Soyadi", SqlDbType.NVarChar).Value = tbSoyadi.Text;
        if (kimlik > 0) // Yeni kayıt değilse...
            cmd.Parameters.Add("@Kimlik", SqlDbType.Int).Value = kimlik;
        try
        {
            cmd.ExecuteNonQuery();
            formAcKapa(false);
            listele();
        }
        catch
        {
            lbMesaj.Text = "Şu anda kayıt yapılamadı. Lütfen daha sonra tekrar deneyin...";
        }
    }
    protected void formAcKapa(Boolean ne)
    {
        pnlForm.Visible = ne;
        btnYeniEkle.Visible = !ne;
    }
    protected void btnİptal_Click(object sender, EventArgs e)
    {
        formAcKapa(false);
        listele();
    }

    protected void btnYeniEkle_Click(object sender, EventArgs e)
    {
        hfKimlik.Value = "0";
        tbOkulNo.Text = "";
        tbAdi.Text = "";
        tbSoyadi.Text = "";
        lbFormBaslik.Text = "Yeni Öğrenci Kaydı";
        formAcKapa(true);
    }
</script>


<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Tek Sayfada Tüm Kayıt İşlemleri</title>
</head>
<body>
    <h2>Tek Sayfada Veritabanı İşlemleri (Listeleme, Ekleme, Değiştirme ve Silme)</h2>
    <form id="form1" runat="server">
        
        <span style="color:red;font-size:18px"><asp:Label ID="lbMesaj" EnableViewState="false" runat="server" /></span><br /><br />

        <asp:Panel ID="pnlForm" runat="server" Visible="false">

            <asp:HiddenField ID="hfKimlik" runat="server" Value="0" />

            <table border="1" cellpadding="10">
                <tr>
                    <td colspan="2"><b><asp:Label ID="lbFormBaslik" runat="server" /></b></td>
                </tr>
                <tr>
                    <td>Okul No</td><td><asp:TextBox ID="tbOkulNo" runat="server" MaxLength="5" /></td>
                </tr>
                <tr>
                    <td>Adı</td><td><asp:TextBox ID="tbAdi" runat="server" MaxLength="15" /></td>
                </tr>
                <tr>
                    <td>Soyadı</td><td><asp:TextBox ID="tbSoyadi" runat="server" MaxLength="15" /></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <asp:Button ID="btnKaydet" runat="server" Text="Kaydet" OnClick="btnKaydet_Click" />
                        <asp:Button ID="btnİptal" runat="server" Text="İptal" OnClick="btnİptal_Click" />
                        <input type="reset" value="Temizle" />
                    </td>
                </tr>
            </table>

        </asp:Panel>

        <asp:Button ID="btnYeniEkle" runat="server" Text="Yeni Öğrenci Kaydı Ekle" OnClick="btnYeniEkle_Click" /><br />
        <h3>Öğrenciler</h3>
        <table border="1" cellpadding="5">
            <tr>
                <td>Okul No</td><td>Adı</td><td>Soyadı</td><td colspan="2">İşlemler</td>
            </tr>
            <asp:Repeater ID="rptOgrenciler" runat="server" OnItemDataBound="rptOgrenciler_ItemDataBound">
                <ItemTemplate>
                    <tr>
                        <td><%# DataBinder.Eval(Container.DataItem, "OkulNo") %></td>
                        <td><%# DataBinder.Eval(Container.DataItem, "Adi") %></td>
                        <td><%# DataBinder.Eval(Container.DataItem, "Soyadi") %></td>
                        <td>
                            <asp:Button ID="btnSil" Text="Sil" runat="server"
                                        OnCommand="silmeTusu_Command" CommandName="Sil"
                                        OnClientClick="return confirm('Kayıt kalıcı olarak silinecek. Devam edecek misiniz?');" />
                            <asp:Button ID="btnDegistir" Text="Değiştir" runat="server"
                                        OnCommand="degistirmeTusu_Command" CommandName="Degistir" />
                        </td>
                    </tr>
                </ItemTemplate>
            </asp:Repeater>
        </table>

    </form>
</body>
</html>

İletişim : hazirsite@gmail.com