Anasayfa / Yazılım / ASP.NET / ASP.NET Formu İle Veri Tabanına Veri Kaydı

ASP.NET Formu İle Veri Tabanına Veri Kaydı

Bu yazımda bir veri kaydı nasıl yapılır bunu bir örnekle açıklayacağım. Basit bir proje oluşturalım. Bir sonraki iki yazımda bununla alakalı olacak. İlk önce veritabanımda Gursoy adında bir veritabanı oluşturdum. Ve içinde iki adet tablo oluşturdum. Tablolarım Calisanlar ve Bolumler tablosu. Kolonları ve aralarındaki ilişkide şu şekilde :

Görüldüğü gibi çok basit hemen oluşturabilirsiniz bunu oluşturmayı burda anlatmayayım 🙂 Ya da direkt SQL Scripti vereyim :

USE [GursoyLtd]
GO
/****** Object:  Table [dbo].[Bolumler]    Script Date: 03/11/2012 20:18:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Bolumler](
	[DepartmanID] [int] IDENTITY(1,1) NOT NULL,
	[Departman] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Bolumler] PRIMARY KEY CLUSTERED 
(
	[DepartmanID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  Table [dbo].[Calisanlar]    Script Date: 03/11/2012 20:18:29 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Calisanlar](
	[CalisanID] [int] IDENTITY(1,1) NOT NULL,
	[DepartmanID] [int] NOT NULL,
	[Ad] [nvarchar](20) NOT NULL,
	[Soyad] [nvarchar](20) NOT NULL,
	[Yas] [nvarchar](2) NOT NULL,
	[Sehir] [nvarchar](20) NOT NULL,
	[Telefon] [nvarchar](20) NOT NULL,
	[Mobil] [nvarchar](20) NOT NULL,
 CONSTRAINT [PK_Calisanlar] PRIMARY KEY CLUSTERED 
(
	[CalisanID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
/****** Object:  ForeignKey [FK_Calisanlar_Bolumler]    Script Date: 03/11/2012 20:18:29 ******/
ALTER TABLE [dbo].[Calisanlar]  WITH CHECK ADD  CONSTRAINT [FK_Calisanlar_Bolumler] FOREIGN KEY([DepartmanID])
REFERENCES [dbo].[Bolumler] ([DepartmanID])
GO
ALTER TABLE [dbo].[Calisanlar] CHECK CONSTRAINT [FK_Calisanlar_Bolumler]
GO

Şimdi Visual Studio WEB projesi açalım boş bir WEB projesi açalım. Var olan WEB Config dosyası üzerinde database bağlantımı sağlamak için ilgili ConnectionString’imi yazıyorum :







    
        
    
  
    
  

Şimdi projemde sağ tıklayarak bir WEB formu oluşturuyorum. KisiEkle.aspx adında bir WEB formu oluşturdum. Bu arada WEB formlarımda tasarım vs yok, tasarım şu anda bizim konumuz değil..

Bu sayfada ben veritabanıma veri kaydedeceğim. Şimdi benim Calisanlar Tablom boş.. Fakat benim Bolumler tablomda bir takım bölümler yer alıyor. Aşağıdaki gibi örneğin,

Şimdi benim KisiEkle.aspx form sayfamda kişinin adını, soyadını, yaşını, şehrini, telefonunu, mobil telefonunu gireceğim. Bölüm bilgisi ise bir DropDownListten alınacak. Şimdi bu sayfamın tasarımını yapayım :

KisiEkle.aspx kodları :

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





    Kişi Ekleme Sayfası
    


    
Kişi Ekleme Sayfası    
     
Bölümü :
Ad :
Soyad :
Yaş :
Şehir :
Telefon :
Mobil :
   
   

Form design kısmı tamamlandı. Şimdi işin kod tarafına geçelim ve veritabanına kayıt nasıl yapılıyor görelim.

KisiEkle.aspx.cs :

BtnKisiEkle butonunun Click Eventinde ve Page_load eventindeki tüm kodlarım :

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 KisiEkle : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Page_Load eventinde web formumda kullanmış olduğum DropDownList kontrolünün içeriğini doldurabilmek için Database
            //Bağlantısı kuruyorum. 
            SqlConnection conn;
            SqlCommand comm;
            SqlDataReader reader;
            //Bağlantı komut satırımı web.configden alıyorum.
            string ConnectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
            conn = new SqlConnection(ConnectionString);
            //Bolumler tablosundan verilerimi çekmek için sorgum..
            comm = new SqlCommand("SELECT DepartmanID,Departman FROM Bolumler", conn);
            try
            {
                //Bağlantımı açıyorum.
                conn.Open();
                //Veri Listeleme yapacağım için ExecuteReader kullanıyorum.
                reader = comm.ExecuteReader();
                //DropDownList kontrolümde Value ve Text alanını ne ile dolduracağımı belirtiyor ve sonra databindig yapıyorum.
                DDLBolum.DataSource = reader;
                DDLBolum.DataValueField = "DepartmanID";
                DDLBolum.DataTextField = "Departman";
                DDLBolum.DataBind();
                reader.Close();
            }
            finally
            {
                //Bağlantımı kapatıyorum.
                conn.Close();
            }
        }

    }
    protected void btnKisiEkle_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            //SQL bağlantımı açıyorum.. Bağlantı bilgimi WEB configden alıyorum. 
            SqlConnection conn;
            SqlCommand comm;
            string ConnectionString = ConfigurationManager.ConnectionStrings["GursoyLtd"].ConnectionString;
            conn = new SqlConnection(ConnectionString);
            //Veri kaydetmek için SQL komutumu yazıyorum, verim Calisanlar tablosuna kaydedilecek.
            comm = new SqlCommand("INSERT INTO Calisanlar (DepartmanID,Ad,Soyad,Yas,Sehir,Telefon,Mobil) VALUES (@DepartmanID,@Ad,@Soyad,@Yas,@Sehir,@Telefon,@Mobil)", conn);
            //Her bir alan için parametremin tipini belirtiyor ve bu parametrenin hangi alandan alınacağını gösteriyorum.
            comm.Parameters.Add("@DepartmanID", System.Data.SqlDbType.Int);
            comm.Parameters["@DepartmanID"].Value = DDLBolum.SelectedItem.Value;
            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;

            try
            {
                //Bağlantımı açıyorum.
                conn.Open();
                //Burada ExcuteNonQuery kullanıyorum, çünkü bana geriye herhangi bir veri listesi geri dönmeyecek.
                comm.ExecuteNonQuery();
                //Komut çalışıp sonlandıktan sonra tekrar aynı sayfaya yönleneceğim.
                Response.Redirect("KisiEkle.aspx");
            }
            catch
            {
                //hata olursa label kontrolümde mesaj yazılacak.
                lblHata.Text = "Bağlantıda hata oluştu, veri kaydedilemedi..";
            }
            finally
            {
                //Bağlantımı kapatıyorum.
                conn.Close();
            }
        }
    }
}

Görüldüğü gibi kod bloğumda KisiEkle butononun Click eventinde ExecuteNonQuery kullandım. ExecuteNonQuery kullanmamın sebebi şu, INSERT ile veri tabanından herhangi bir resultset dönmeyecek, dolayısı ile burda ExecuteNonQuery kullanmalıyım.

Veritabanına veri kaydı alırken dikkat etmemiz gereken veri tipleridir, veri tiplerinin SQL tarafında uygumluğu, kullanıcıların form alanında kontrollere girmiş olduğu verilerin uygun bir şekilde eğer gerekiyorsa convert edilmesi gibi tüm ihtimalleri düşünmeliyiz.

Bir adet Label kontrolü kullandım, bunu herhangi bir hata durumunda hatayı bildirebilmek için kullandım. Aksi halde hata olup olmadığını kullanıcıya gösteremeyecektim. Kodlara şöyle bir baktığımızda biraz korkutucu gibi görünebilir ama mümkün olan en basit halinde anlatımını yapmaya çalıştım. Bu arada veri eklemiş olduğum Calisanlar tablosunda CalisanID alanım benim otomatik artan olarak tanımlandığı için bu veri alanı için kayıt verisi almıyorum. Otomatik artan olarak tanımlamasa idim ve kodlarım bu şekilde olsa idi hata alacaktım.

8 yorum

  1. merhabalar mevzu bahis olan kodu uyguladım ancak dataya veri kayıt edemiyorum step step gittiğimde sql cümleciğini execute etmediğini gördüm bunun önüne nasıl geçebilirim c# ve visiual studio da yeniyim ve anlayanilmişte değilim. Yardımlarınızı rica edeceğim.

  2. Veri tabanı kısmında ilgili database ve tablolar, doğru bir şekilde oluşturuldu değil mi? Üstte ilgili Sql Scripti vermiştim.

  3. ben sizinkisi gibi yaptım lakin conn kodunda instance failure verdi.

  4. Bağlantı satırınızı kontrol etmenizi öneririm. WEB config dosyası üzerinde yer alan bağlantı satırınıza bir bakın.

  5. bize bir adet mini kpss yapmamız lazım acaba yardımcı olabilir mısınız

  6. Hocam peki ya iki bölüme üye olmak isterse nasıl olacak ? yani çoktan çoğa bir tablo daha eklediğimizde bunu c# tarafında nasıl kaydedeceğiz?

    Teşekkürler

  7. Merhaba bu şekilde formdan veri eklerken eklediğimiz tabloda foreign key ilişkisi varsa bu id yi nasıl atıyoruz eklediğimiz içeriğe? Yani demek istediğim bir makale ekliyorum diyelim. Text olarak başlığını ve içeriğini aldım ancak makaleyi yazan kullanıcının id sini nasıl alıcam? Şimdiden teşekkürler.

  8. eyvallah hoca

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir