ASP.NET: Kullanıcı Kaydetme Sayfası Oluşturma

by emrekayikcilar 29.07.2008 19:38:00
ASP.NET ile yapacağımız web sitelerinde, internette neredeyse her web sitesinde gördüğümüz ve kullanıcılardan bilgi almak, bu bilgileri veritabanına kaydetmek için kulanılan kayıt(Register) sayfalarını stabil bir şekilde geliştirebiliriz. Burada stabil olarak tanımlamamın nedeni yardımcı(helper) fonksiyonların ve EventHandler denilen sayfada kullanıcı tarafından yaratılan olayların(Örneğin bir butona tıklanması) kodlarının ayrı ayrı ve düzenli bir şekilde yazılabilmesidir.
Uygulama sayfamız kodlamayı bitirdikten sonra genel olarak aşağıdaki gibi gözükecektir. Sayfadaki kontroller Label(Durum... yazan yerde bir Label kontrolü bulunmaktadır.), Button, DropDownList olmak üzere genel kontrollerdir. Dizaynın kolay olması için Table tagından yararlandım.
kayıt sayfası
Belki kullanıcıdan istenen bilgiler yeterli olmayabilir; ama konunun özünü kavramak için iyi bir örnek sayılır. Veritabanına da kayıt gerçekleştireceğimiz için artık kodlama kısmına geçelim. Sayfayı ilk açtığımızda karşımıza her zamanki Page_Load metodu çıkar. Buradan sonra kendi kodlamalarımıza geçelim. C# Nesne tabanlı bir dil olduğunda dolayı Nesne Tabanlı dillerin bütün özelliklerini kullanarak her yerde kullanabileceğimiz bir Register(Kayıt) kontrolü yapabiliriz. Şimdilik orta düzeyde ve geliştirilebilir bir kayıt sayfası bize yeter.
 
Arka planda sayfada girilen bilgilerin tutulacağı bir kullanıcı tablosu oluşturmak gereklidir. Bunun için SQL kodlarını yazıp SQL Query Analyser biçiminde bir programla kullanıcı tablosunu veritabanına ekleyebilriz. Fakat ben kullanım kolaylığı açısından Sql Server Management Studio Express kulandım. Kullanımı çok kolaydır. Burada yaptığım kullanıcılar tablosunun diyagramını görüyoruz.Burada tek kafayı karıştırabilecek olan bölüm RoleID ve SehirID sutunlarıdır. Bu sutunlar Roller ve Sehirler tablolarına bağlanırlar. Sehirler tahmin edilebileceği gibi sadece şehirleri sıralayan bir tablodur. Roller tablosunda ise; üç tane rol bulunmaktadır. Bunlar Yönetici, Kullanıcı, Ziyaretçi sütunlarıdır. Biz burada SQL kodu ile kullanıcı eklerken direkt olarak ID'yi 2 vereceğiz.
 
kulDiyagram

Sayfanın en üstündeki import edilen namespace'ler aşağıda görülmektedir.

   1: using System;  
   2: using System.Data;  
   3: using System.Configuration;  
   4: using System.Collections;  
   5: using System.Web;  
   6: using System.Web.Security;  
   7: using System.Web.UI;  
   8: using System.Web.UI.WebControls;  
   9: using System.Web.UI.WebControls.WebParts;  
  10: using System.Web.UI.HtmlControls;  
  11: using System.Data.SqlClient
Visual Studio'yu açtığımızda zaten bu kodların çoğu otomatik olarak gelmektedir. Ben bunlardan sadece using System.Data.SqlClient; satırını ekledim. Veritabanına kaydederken bu namespace'te bulunan class'lardan yararlanacağız.
 
   1: public partial class Default2 : System.Web.UI.Page  
   2: {  
   3:     public struct Kullanici  
   4:     {  
   5:         public string adSoyad;  
   6:         public string Email;  
   7:         public string kullaniciAdi;  
   8:         public int sehirID;  
   9:         public string sifre;  
  10:         public string kullaniciID;  
  11:     }  
Bu kodu yazarken neredeyse her programlama dilinde bulunan Struct Data yapısını kullandım. Bu bize sayfadaki kullanıcının girdiği değerleri kolayca alıp bir yerde tutmamızı sağlar. Bunun yerine Kullanici Class'ı açıp Nesne tabanlı programlamaya daha uygun hareket edebilirdik; fakat şimdilik bu yapı yeterli. Ayrıca bu yapıyı kullanarak veritabanı ile kolayca ilişki kurabiliriz. Burada dikkati çeken başka bir olay da değişkenlerin public olarak tanımlanmasıdır. Eğer Struct yapısındaki değişkenlere diğer metodlardan ulaşmak istiyorsak; değişkenler public olarak tanımlanmalıdır.
 
   1: Kullanici structKullanici;  
   2: private bool SetValues()  
   3: {  
   4:     bool deger = false;  
   5:     try  
   6:     {  
   7:         structKullanici = new Kullanici();  
   8:         structKullanici.adSoyad = txtAdSoyad.Text;  
   9:         structKullanici.Email = txtEmail.Text;  
  10:         structKullanici.kullaniciAdi = txtKullaniciAdi.Text;  
  11:         structKullanici.sehirID = Convert.ToInt32(ddlSehirler.SelectedValue);  
  12:         structKullanici.sifre = txtSifre.Text;  
  13:         deger = true;  
  14:     }  
  15:     catch  
  16:     {  
  17:         deger = false;  
  18:     }  
  19:     return deger;  
  20: }  
Burada kullanıcıdan aldığımız bilgileri yarattığımız struct yapısının özelliklerine gönderiyoruz. Bu yapı Nesne Tabanlı programlama ile daha önce uğraşanlara çok tanıdık gelir. Hatta kullanılan (.) nokta notasyonu aynen Objelerle uğraşıyormuşuz gibi gelir. Burada yazdığımız metod önemli bir iş daha yapmaktadır. Bu iş kullanıcıdan gelen değerlerin Struct yapısındaki değişkenlere atanıp atanmadığının da kontrölünü yapar. Bu yüzden metodun boolean(1/0) değer dönmesinin daha yararlı olacağını düşündüm.
 
   1: private SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Integrated Security=True; Initial Catalog=QuizWebSite");  
   2: private void KullaniciKaydet(Kullanici kullanici)  
   3: {  
   4:     string sorgu = "INSERT INTO Kullanicilar " +  
   5:     "(KullaniciAdi, Sifre, KayitTarih, RoleID, AdSoyad, Email, SehirID) " +  
   6:     "VALUES " +  
   7:     "(@KullaniciAdi, @Sifre, GETDATE(),2, @AdSoyad, @Email, @SehirID )";  
   8:     SqlCommand cmd = new SqlCommand(sorgu, conn);  
   9:     // Parametreleri ekle  
  10:     cmd.Parameters.AddWithValue("@KullaniciAdi", kullanici.kullaniciAdi);  
  11:     cmd.Parameters.AddWithValue("@Sifre", kullanici.sifre);  
  12:     cmd.Parameters.AddWithValue("@Email", kullanici.Email);  
  13:     cmd.Parameters.AddWithValue("@SehirID", kullanici.sehirID);  
  14:     cmd.Parameters.AddWithValue("@AdSoyad", kullanici.adSoyad);  
  15:     // parametrelerin eklenmesi bitti  
  16:     if (conn.State == ConnectionState.Closed)  
  17:     {  
  18:         conn.Open();  
  19:     }  
  20:     int id = cmd.ExecuteNonQuery();  
  21:     // Bellek temizleme  
  22:     cmd.Parameters.Clear();  
  23:     conn.Close();  
  24:     if (id > 0)    
  25:     {  
  26:         lblMesaj.Text = "Eklenen kullanıcı kayıt id= " + id;  
  27:     }  
  28:     else  
  29:     {  
  30:         lblMesaj.Text = "Hata";  
  31:     }  
  32: }  
Burada ise; veritabanı bağlantısı kurulup (sqlconnection) bağlantı üzerinden sqlcommand objesi ile sorgu uygulanır. Bu method Struct'ı parametre alır, böylece kolayca struct'ın değişkeni üzerinden kullanıcının girilen bilgileri gönderilip, veritabanına kullanıcının bilgileri eklenebilir. Command objesini parametrelerinin oluşturulması da tamamen SQL Sorgusu ile senkron olarak yapılmalıdır. Aynı parametre isimleri verilmelidir. Aksi takdirde hata ile karşılaşırız. Belirtilmesi gereken başka bir nokta da sqlconnection objesinin aldığı string parametredir. Bu parametreye Connection String adı verilir. Bu veriler uygulamanın veritabanı işlemlerini yaparken kullandığı bilgileri bulundurur.
 
   1: protected void Page_Load(object sender, EventArgs e)  
   2: {  
   3:    
   4: }  
   5: protected void btnGonder_Click(object sender, EventArgs e)  
   6: {  
   7:     if (SetValues())  
   8:     {  
   9:         KullaniciKaydet(structKullanici);  
  10:     }  
  11: }  
  12: } // Class kapandı
Son kod bloğunda ise; tamamen ektiğimizi biçme durumu vardır. Bu kısa kodun arkasında az önce yazdığımız metodlar asıl işi yapar. Gönder butonunun click eventi'ini buton üzerinde (Design Görünümünde iken) çift tıklayarak gelmesini sağlarız. Önceikle kullanıcıdan alınan değerlerin Data yapımız olan Struct'a atanmasını sağlarız. Daha sonra ise kaydetme metodumuzu kullanarak işlemi tamamlarız.

Notlar

  • Bu şekilde kullanıcıdan istediğimiz bilgiyi alıp rahat bir şekilde üzerinde veritabanı işlemleri uygulayabiliriz.
  • Bellek yönetimini kod içinde genelde veritabanı işlemleri gerçekleştirirken yapmalıyız. Aksi takdirde SQL Server boşu boşuna bağlantıyı açık tutmuş olur.
  • Connection String çok önemli bir konudur. Burada sadece kısa bir şekilde bahsedilmiştir. Tam olarak öğrenilmesi veritabanı işlemlerini doğru yapmak için önemlidir. Buradan daha geniş bilgiye ulaşılabilir. Ayrıca burada belirtilen Data Source kısmında belirtilen (.) işareti sizde çalışmaz ise; Bilgisayar_adı\Sql_Server_Adı şeklinde deneyin.
  • T-SQL Dili, eğer .NET veritabanı uygulamaları yazılmak isteniyorsa; öğrenilmesi gereken veritabanı programlama dilidir.

2 kişi tarafından 2.0 olarak değerlendirildi

  • Currently 2/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

İlişkili yazılar

Yorumlar

02.01.2009 11:47:59

sfdrn

tebrik ederim çok güzel anlatmışsın gerçekten.

sfdrn

02.01.2009 15:38:26

Emre

Çoktandır yazamıyorum. Bakalım tekrar ne zaman başlayacamSmile

Emre

09.02.2009 14:42:02

Mahmutcan Şimay

ASP.NET te import ne işe yarar? bunun cevabını engeç bugün verirseniz sevinirim

Mahmutcan Şimay tr

09.02.2009 18:47:57

emre

İyi günler,
ASP.NET sayfalarında(.aspx) veya User Control(*.ascx) sayfalarında olan bir özelliktir. Sayfaya Namespace eklemeye yarar. Yalnız kod sayfasına değil. Direkt olarak html kodlarının olduğu kullanıcı arayüz sayfasına eklenir. Bu şekilde eklediğimiz namespace'teki Classları .aspx ve .ascx sayfalarında kullanabiliriz.
Kod örneği vermek gerekirse;
<%@ Import namespace=”System.Data” %>
<%@ Import namespace=”System.Data.SqlClient” %>
Bu şekilde <%@ Page %> altına eklenen namespaceler görebilirsiniz. Bu namespacelerin altındaki Classlar artık sayfa içinde kullanılabilir haldedir.
İnşallah doğru anlamışımdırSmile

emre

17.03.2009 16:25:29

sanane

ASP.Net'ten bahsediyoruz sanıyordum...C# nerden çıktı?

sanane tr

17.04.2009 09:46:49

M. Cenk Yeniköylü

Merhaba;

Anlatımınız başlangıç seviyesindeki yazılımcılar için yeterli ancak uzman yazılımcılar içinde yetki mekanizmalı ve session kullanımlı bir register ve login/logout işlemleri hakkında bir makale yazarsanız daha verimli olacaktır.

Başarılarınızın devamını dilerim.
Saygılarımla,
M. Cenk Yeniköylü

M. Cenk Yeniköylü tr

20.04.2009 13:34:53

Emre

Eleştiriniz için sağolun. Çoktandır siteye yazı yazamıyordum. Yorumunuz beni tekrar yazmak için heveslendirdi. Sanırım birkaç gün içinde tekrar bloga giriş yaparım. İlginize teşekkürler.

Emre

18.05.2009 00:27:30

toki

harıkasın

toki

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Canlı önizleme

04.07.2009 02:49:27

Powered by BlogEngine.NET 1.3.1.0
Theme by Mads Kristensen

Yazar Hakkında

Yazarýn Adý Emre Kayıkçılar
Felaket boş bi adam.

Bana mesaj at Send mail

Takvim

<<  Temmuz 2009  >>
PaSaÇaPeCuCuPa
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

Yazılara bir de takvimde bakayım

Sayfalar

    Son yorumlar

    Feragatname

    Bu filmdeki olaylar ve kahramanlar hepsi fikşişizdır.

    © Copyright 2009 Emre Kayıkçılar

    Giriş