Pazartesi , Eylül 22 2014
SON YAZILAR
Anasayfa / Yazılım / ASP.NET / ASP.NET Formu ile Veritabanı Veri Güncelleme

ASP.NET Formu ile Veritabanı Veri Güncelleme

Veritabanına bir veri kaydı eklemek ile var olan bir veri kaydının güncellenmesi arasındaki en önemli fark güncelleme işleminin yapılabilmesi için kullanıcıya veri tabanındaki ilgili bilgileri de listeleyip göstermek gerekir. Böylelikle kullanıcı hem var olan bilgileri görebilir hemde gerekli güncelleme durumu söz konusu ise bunu gerçekleştirebilir.

Bir bilgi update etmek için kalıp olarak aşağıdaki gibi bir yapı kullanabilirim :

comm = new SqlCommand ("UPDATE Table SET Field1=@Parameter1,Field2=@Parameter2,..... WHERE UniqueField=@UniqueFieldParameter ", conn);
comm.Parameters.Add("@Parameter1", System.Data.SqlDbType.Type1);
comm.Parameters["@Parameter1"].Value =value1;
comm.Parameters.Add("@Parameter2", System.Data.SqlDbType.Type2);
comm.Parameters["@Parameter2"].Value =value2;

Görüldüğü üzere Update işlemi için bir SqlCommand nesnesi oluşturuluyor. Daha sonra gerekli güncellenmesi gereken parametreler belirtiliyor ve tipleri belirtiliyor. Güncelleme yapılacağı zaman en önemli olan şey tabi gerçekten güncelleme yapmak istediğimiz kayıt üzerinde işlem yapılmasıdır. Bunu yapmak içinde en doğru olanı WHERE deyimini kullanarak uygun bir şekilde filtreleme yapıp bir primary key alanı kullanan bir alanın bilgisini vererek bu verileri güncellememizdir. Eğer WHERE ile güncellenecek tabloda ilgili güncellenecek satırı belirtmez isem benim tüm tablodaki verilerim update işleminde tanımladığım veriler ile değişecektir ve bunu geri almanında mümkünatı yoktur. Bu yüzden WHERE kullanımına azami dikkat göstermeliyiz.

Şimdi bu kadar teorik uygulamanın ardından pratik yaparak Update işlemini anlatayım. Bir önceki yazımda örnek bir veritabanına kayıt eklemeyi anlatmıştım. Şimdi bir kaydı güncellemeye değineceğiz. Bir önceki yazıyı okumanızı öneririm.

Veri Tabanına Veri Kaydı

web.config dosyam :

web.config :

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit

http://go.microsoft.com/fwlink/?LinkId=169433

  -->

<configuration>

    <system.web>
        <compilation debug="false" targetFramework="4.0" />
    </system.web>
  <connectionStrings>
    <add name="NorthwndBaglanti" connectionString="Server=.;Database=Northwnd;Integrated Security=true"/>
  </connectionStrings>

</configuration>

Yine aynı veritabanını kullanacağım. Veritabanını oluşturduğumuzu varsayıyor ve direkt olarak güncelleme için yapacağım işlemlerime başlıyorum. Projeme KisiGuncelle.aspx adında bir web form ekliyorum.

Şimdi web form sayfamın design tarafı yani tasarım kısmı kodlarını ve görüntüsünü vereyim :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="KisiGuncelle.aspx.cs" Inherits="KisiGuncelle" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Kişi Güncelle</title>
    <style type="text/css">
        .style1
        {
            width: 100%;
        }
        .style2
        {
            width: 206px;
        }
        .style3
        {
            width: 206px;
            height: 23px;
        }
        .style4
        {
            height: 23px;
        }
        .style5
        {
            width: 10px;
        }
        .style6
        {
            height: 23px;
            width: 10px;
        }
        .style7
        {
            width: 206px;
            height: 52px;
        }
        .style8
        {
            width: 10px;
            height: 52px;
        }
        .style9
        {
            height: 52px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    <table class="style1">
        <tr>
            <td class="style2">
                <asp:Label ID="lblHata" runat="server"></asp:Label>
            </td>
            <td class="style5">
                &nbsp;</td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td class="style2">
                <asp:DropDownList ID="ddlCalisanListe" runat="server" Width="200px">
                </asp:DropDownList>
            </td>
            <td class="style5">
                &nbsp;</td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td class="style7">
                <asp:Button ID="Button1" runat="server" style="font-weight: 700" 
                    Text="Seçiniz" />
            </td>
            <td class="style8">
            </td>
            <td class="style9">
            </td>
        </tr>
        <tr>
            <td class="style2">
                Ad
            </td>
            <td class="style5">
                :</td>
            <td>
                <asp:TextBox ID="txtAd" runat="server" Width="200px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style2">
                Soyad</td>
            <td class="style5">
                :</td>
            <td>
                <asp:TextBox ID="txtSoyad" runat="server" Width="200px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style3">
                Yaş</td>
            <td class="style6">
                :</td>
            <td class="style4">
                <asp:TextBox ID="txtYas" runat="server" Width="30px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style2">
                Şehir</td>
            <td class="style5">
                :</td>
            <td>
                <asp:TextBox ID="txtSehir" runat="server" Width="200px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style2">
                Telefon</td>
            <td class="style5">
                :</td>
            <td>
                <asp:TextBox ID="txtTelefon" runat="server" Width="200px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style2">
                Mobil</td>
            <td class="style5">
                :</td>
            <td>
                <asp:TextBox ID="txtMobil" runat="server" Width="200px"></asp:TextBox>
            </td>
        </tr>
        <tr>
            <td class="style2">
                &nbsp;</td>
            <td class="style5">
                &nbsp;</td>
            <td>
                <asp:Button ID="btnGuncelle" runat="server" style="font-weight: 700" 
                    Text="Güncelle" />
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

Tasarımım bu şekilde.. Şimdi burda kullanılan kontrolleri açıklayayım. Bir adet Label kontrolüm var, herhangi bir hata oluşursa hata mesajını burada vereceğim. Bir dropdownList var, burada veritabanında bulunan mevcut kişileri listelemek için yer alıyor. Yine bu dropdownList yanında bir adet buton kontrolüm var, bu kontrole bastığımda dropDownList tarafında seçilen kişinin bilgileri bir alttaki kontrollerime yazılacak. Alttaki TextBox kontrollerimde kişinin bilgileri yer alacak ve gerekli düzenlemeleri yapabileceğim. En alttaki Güncelle butonumla ise güncelleme işlemini yapacağım.

Şimdi ilk görevimiz şu bu web formunun Page_Load eventinde yazmam gereken bir takım kodlar var. Öncelikle yapılacak işlemleri parça parça vereyim, en sonda KisiGuncelle.aspx.cs sayfasının tüm kodlarını tek bir alanda vereceğim. Sayfama namespace olarak System.Data.SqlClient ve System.Configuration namaspace alanlarını ekliyorum.

ve Page_Load eventinde :

public partial class KisiGuncelle : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Sayfam PostBack edilmemişse ve ilk defa yükleniyorsa CalisanListesiniYukle metodunu çalıştır.
        if (!IsPostBack)
        {
            CalisanListesiniYukle();
        }
        
    }
    //CalisanListesiniYukle metodum.
    private void CalisanListesiniYukle()
    {
        //Bağlantı ve komut tanımlamalarımç
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        //Bağlantımı satırım. ConfigurationManager ile alıyorum.
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //Burada komut kısmında bir string toplama işlemim var çünkü benim Ad ve Soyad alanım tablomda ayrı ayrı,
        //Ben bunu DropDownList kontrolümde yan yana göstermek istiyorum o yüzden sorgum bu şekilde.
        comm = new SqlCommand("SELECT CalisanID, Ad + ' ' + Soyad AS AdSoyad FROM Calisanlar", conn);

        try
        {
            //Bağlantımı açıyorum.
            conn.Open();
            //DataReader nesnemi çalıştırıyorum.
            reader = comm.ExecuteReader();
            //DropDownList kontrolüm ilgili alanlarla doluyor.
            ddlCalisanListe.DataSource = reader;            
            ddlCalisanListe.DataValueField = "CalisanID";
            ddlCalisanListe.DataTextField = "AdSoyad";
            ddlCalisanListe.DataBind();
            reader.Close();
        }
        catch
        {
            //Hata meydana gelirse verilecek mesaj.
            lblHata.Text = "Çalışan listesi yüklemesi esnasında hata oluştu!";
        }
        finally
        {
            //Bağlantımı kapatıyorum.
            conn.Close();
        }
        //Herhangi bir isim seçilmediğinde textbox kontrollerim ve butonum kullanılmayacak o yüzden burası da böyle.
        btnGuncelle.Enabled = false;
        txtAd.Text = "";
        txtSoyad.Text = "";
        txtYas.Text = "";
        txtSehir.Text = "";
        txtTelefon.Text = "";
        txtMobil.Text = "";
    }
}

DropDownList kontrolüme isimleri çekebildim. Şimdi açıklayalım, CalisanListesiniYukle diye bir metodum var ve bu metodum Page_Load eventinde, sayfam eğer daha önce PostBack edilmedi ise yani sayfam ilk kez yükleniyor ise bu metot çalışacak. Bu metot içinde gerekli bağlantı kurallarım tanımlı, kodların içinde de açıklamalarımı yaptım zaten. Sayfa yüklendiğinde herhangi bir isim seçilmediği anda Güncelle butonum pasif kalmaya devam edecek. Çalışan ad ve soyad bilgileri DropDownList kontrolümün DataTextField alanında, DataValueField alanındada CalisanID bilgim yer alıyor.

Şimdi formumuzun geri kalanına devam edelim. İsimleri listeledik, şimdi buradan isim seçip allataki kontrolörlerde bunların listelenmesini gerçekleştirelim. Seçiniz butonunun Click eventindeki kodlarımda şu şekilde :

KisiGuncelle.aspx.cs Seciniz Butonu Click Eventinde :

 protected void btnSeciniz_Click(object sender, EventArgs e)
    {
        //Sql Bağlantı tanımlamalarımı yapıyorum.
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        string ConnectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(ConnectionString);
        //Sql Komutum ve hangi parametreye göre verileri çekeceğimi belirtiyorum.
        comm = new SqlCommand("SELECT Ad,Soyad,Yas,Sehir,Telefon,Mobil FROM Calisanlar WHERE CalisanID = @CalisanID", conn);
        comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int);
        comm.Parameters["@CalisanID"].Value = ddlCalisanListe.SelectedItem.Value;

        try
        {
            //Bağlantımı açıyorum.
            conn.Open();
            reader = comm.ExecuteReader();
            if (reader.Read())
            {
                //DataReader nesnesi okunduğu sürece ilgili alanlarımı dolduruyorum.
                txtAd.Text = reader["Ad"].ToString();
                txtSoyad.Text = reader["Soyad"].ToString();
                txtYas.Text = reader["Yas"].ToString();
                txtSehir.Text = reader["Sehir"].ToString();
                txtTelefon.Text = reader["Telefon"].ToString();
                txtMobil.Text = reader["Mobil"].ToString();
            }
            reader.Close();
            btnGuncelle.Enabled = true;
        }

        catch
        {
            //Hata durumu olması halinde..
            lblHata.Text = "Çalışan bilgileri detayı yüklenirken hata oluştu";
        }

        finally
        {
            //Bağlantımı kapatıyorum.
            conn.Close();
        }

        
    }

Kullanıcı Seçiniz butonuna bastıktan sonra yukarıdaki kodlar işlenecektir. Ve DropDownListten seçmiş olduğu isme göre yani kod tarafında CalisanID olarak belirttiğimiz parametreye göre ilgili alanlar bu seçilen kişinin bilgileri ile doldurulacaktır. Herhangi bir isim seçildikten sonra Güncelle butonunu aktif hale getirdim, çünkü artık yavaş yavaş güncelleme kısmına geliyoruz. Şimdi web formumun design kısmında Güncelle butonuna çift tıklıyorum ve btnGuncelle için Click Eventi oluşturuluyor, buradaki kodlarım ise şöyle :

protected void btnGuncelle_Click(object sender, EventArgs e)
    {
        //Bağlantı tanımlamalarımı yapıyorum.
        SqlConnection conn;
        SqlCommand comm;
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //SQL Command yazıyorum bu sefer görüldüğü gibi UPDATE işlemi yapıyorum, update edilecek alanlarımı belirtiyorum.
        comm = new SqlCommand("UPDATE Calisanlar SET Ad=@Ad,Soyad=@Soyad,Yas=@Yas,Sehir=@Sehir,Telefon=@Telefon,Mobil=@Mobil WHERE CalisanID=@CalisanID", conn);
        //Parametre bilgilerim - veri tiplerim ve bu bilgilerin hangi kontrollerden alınacağını belirtiyorum.
        comm.Parameters.Add("@Ad", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Ad"].Value = txtAd.Text;
        comm.Parameters.Add("@Soyad", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Soyad"].Value = txtSoyad.Text;
        comm.Parameters.Add("@Yas", System.Data.SqlDbType.NVarChar, 2);
        comm.Parameters["@Yas"].Value = txtYas.Text;
        comm.Parameters.Add("@Sehir", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Sehir"].Value = txtSehir.Text;
        comm.Parameters.Add("@Telefon", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Telefon"].Value = txtTelefon.Text;
        comm.Parameters.Add("@Mobil", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Mobil"].Value = txtMobil.Text;
        comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int);
        comm.Parameters["@CalisanID"].Value = ddlCalisanListe.SelectedItem.Value;

        try
        {
            //Bağlantımı açıyorum, komutu çalıştırıyorum.
            conn.Open();
            comm.ExecuteNonQuery();
        }
        catch
        {
            //Hata olursa verilecek mesaj
            lblHata.Text = "Güncelleme esnasında hata meydana geldi";
        }
        finally
        {
            conn.Close();
        }
        CalisanListesiniYukle();
    }

Güncelleme işlemimiz de bu şekilde.. Güncelle butonuna basıldığında kontrollerimde olan veriler veritabanına aktarılacak ve güncelleme işlemi tamamlanacak. Güncellemenin yapıldığını tekrar ilgili kişiyi seçip bilgilerini listeleterek görebiliriz.

Şimdi şu KisiGuncelle.aspx.cs sayfasının tüm kodlarını bir arada vereyim, karışıklık olmasın. Bu yazı bayağı uzun oldu, bir sonraki yazıda Veri Silme işlemi ile alakalı olacak..

KisiGuncelle.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.SqlClient;
using System.Configuration;

public partial class KisiGuncelle : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Sayfam PostBack edilmemişse ve ilk defa yükleniyorsa CalisanListesiniYukle metodunu çalıştır.
        if (!IsPostBack)
        {
            CalisanListesiniYukle();
        }
        
    }
    //CalisanListesiniYukle metodum.
    private void CalisanListesiniYukle()
    {
        //Bağlantı ve komut tanımlamalarımç
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        //Bağlantımı satırım. ConfigurationManager ile alıyorum.
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //Burada komut kısmında bir string toplama işlemim var çünkü benim Ad ve Soyad alanım tablomda ayrı ayrı,
        //Ben bunu DropDownList kontrolümde yan yana göstermek istiyorum o yüzden sorgum bu şekilde.
        comm = new SqlCommand("SELECT CalisanID, Ad + ' ' + Soyad AS AdSoyad FROM Calisanlar", conn);

        try
        {
            //Bağlantımı açıyorum.
            conn.Open();
            //DataReader nesnemi çalıştırıyorum.
            reader = comm.ExecuteReader();
            //DropDownList kontrolüm ilgili alanlarla doluyor.
            ddlCalisanListe.DataSource = reader;            
            ddlCalisanListe.DataValueField = "CalisanID";
            ddlCalisanListe.DataTextField = "AdSoyad";
            ddlCalisanListe.DataBind();
            reader.Close();
        }
        catch
        {
            //Hata meydana gelirse verilecek mesaj.
            lblHata.Text = "Çalışan listesi yüklemesi esnasında hata oluştu!";
        }
        finally
        {
            //Bağlantımı kapatıyorum.
            conn.Close();
        }
        //Herhangi bir isim seçilmediğinde textbox kontrollerim ve butonum kullanılmayacak o yüzden burası da böyle.
        btnGuncelle.Enabled = false;
        txtAd.Text = "";
        txtSoyad.Text = "";
        txtYas.Text = "";
        txtSehir.Text = "";
        txtTelefon.Text = "";
        txtMobil.Text = "";
    }

    protected void btnSeciniz_Click(object sender, EventArgs e)
    {
        //Sql Bağlantı tanımlamalarımı yapıyorum.
        SqlConnection conn;
        SqlCommand comm;
        SqlDataReader reader;
        string ConnectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(ConnectionString);
        //Sql Komutum ve hangi parametreye göre verileri çekeceğimi belirtiyorum.
        comm = new SqlCommand("SELECT Ad,Soyad,Yas,Sehir,Telefon,Mobil FROM Calisanlar WHERE CalisanID = @CalisanID", conn);
        comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int);
        comm.Parameters["@CalisanID"].Value = ddlCalisanListe.SelectedItem.Value;

        try
        {
            //Bağlantımı açıyorum.
            conn.Open();
            reader = comm.ExecuteReader();
            if (reader.Read())
            {
                //DataReader nesnesi okunduğu sürece ilgili alanlarımı dolduruyorum.
                txtAd.Text = reader["Ad"].ToString();
                txtSoyad.Text = reader["Soyad"].ToString();
                txtYas.Text = reader["Yas"].ToString();
                txtSehir.Text = reader["Sehir"].ToString();
                txtTelefon.Text = reader["Telefon"].ToString();
                txtMobil.Text = reader["Mobil"].ToString();
            }
            reader.Close();
            btnGuncelle.Enabled = true;
        }

        catch
        {
            //Hata durumu olması halinde..
            lblHata.Text = "Çalışan bilgileri detayı yüklenirken hata oluştu";
        }

        finally
        {
            //Bağlantımı kapatıyorum.
            conn.Close();
        }

        
    }
    protected void btnGuncelle_Click(object sender, EventArgs e)
    {
        //Bağlantı tanımlamalarımı yapıyorum.
        SqlConnection conn;
        SqlCommand comm;
        string connectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
        conn = new SqlConnection(connectionString);
        //SQL Command yazıyorum bu sefer görüldüğü gibi UPDATE işlemi yapıyorum, update edilecek alanlarımı belirtiyorum.
        comm = new SqlCommand("UPDATE Calisanlar SET Ad=@Ad,Soyad=@Soyad,Yas=@Yas,Sehir=@Sehir,Telefon=@Telefon,Mobil=@Mobil WHERE CalisanID=@CalisanID", conn);
        //Parametre bilgilerim - veri tiplerim ve bu bilgilerin hangi kontrollerden alınacağını belirtiyorum.
        comm.Parameters.Add("@Ad", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Ad"].Value = txtAd.Text;
        comm.Parameters.Add("@Soyad", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Soyad"].Value = txtSoyad.Text;
        comm.Parameters.Add("@Yas", System.Data.SqlDbType.NVarChar, 2);
        comm.Parameters["@Yas"].Value = txtYas.Text;
        comm.Parameters.Add("@Sehir", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Sehir"].Value = txtSehir.Text;
        comm.Parameters.Add("@Telefon", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Telefon"].Value = txtTelefon.Text;
        comm.Parameters.Add("@Mobil", System.Data.SqlDbType.NVarChar, 20);
        comm.Parameters["@Mobil"].Value = txtMobil.Text;
        comm.Parameters.Add("@CalisanID", System.Data.SqlDbType.Int);
        comm.Parameters["@CalisanID"].Value = ddlCalisanListe.SelectedItem.Value;

        try
        {
            //Bağlantımı açıyorum, komutu çalıştırıyorum.
            conn.Open();
            comm.ExecuteNonQuery();
        }
        catch
        {
            //Hata olursa verilecek mesaj
            lblHata.Text = "Güncelleme esnasında hata meydana geldi";
        }
        finally
        {
            conn.Close();
        }
        CalisanListesiniYukle();
    }
}

Bir yorum

  1. Hocam öncelikle meraba örnekleriniz açık ve kaliteli teşekkürler ancak ben bu update olaynı bi türlü beceremedim 2 gündür ugrasıyorum e-okul tarzı bi proje ödevim var lütfen yardımcı olurmusunuz ben direkt olarak grid içindeki butona tıklayıp pop up içinde güncelleme yapmam gerekiyor.

Add Comment Register



Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>