Merhabalar,
Bugünkü
yazımızın konusu başlıkta da belirtildiği üzere kullanıcı adının kontrolü
olacaktır.
Yazdığımız
programları kullanan insanlar ve bu insanların programımızda hesapları vardır. Söz
konusu hesapların karışmaması adına kullanıcı kayıt işlemi yaparken belli
noktalarda kontroller gerçekleştirmemiz gerekir. Örneğin kullanıcı bilgilerini
girip kaydet butonuna bastığında kullanıcı ad ve e-mail adresinin
veritabanımızda olup olmadığının kontrolu yapılmalı ve ancak girilen bilgilerin
daha önceden başka bir kullanıcı tarafından alınmamış olması durumunda yeni kayıt
işlemi gerçekleştirilmelidir.
Bu
yazıda da kendimize sormamız gereken soru, C#’ta e-mail veya kullanıcı adı
kontrolünü nasıl gerçekleştiririm olacaktır.
Bununla
ilgili olarak önce veritabanımızı oluşturalım;
Ben
Forum isimli bir database oluşturduktan sonra bu database içine Uyeler isimli tek
bir tablo ekledim. Bu tabloyu aşağıda görebilirsiniz;
Veritabanımızı
oluşturduktan sonra bir sonraki aşama arayüzün oluşturulmasıdır. Formunuzu
aşağıdaki gibi basit bir şekilde tasarlayabilirsiniz.
Sıra
geldi metotlarımızı yazmaya;
NOT: Burada yazacağımız metodun
geri dönüş türü Boolean olacaktır. Aslında sebebi programı yazarken kendimize
sorduğumuz soruda saklıdır. Veritabanında böyle bir “user name” var mı, böyle
bir mail adresi var mı? sorusunun cevabı
tabiki var ya da yok olacaktır. Boolean türünün de iki
değer aldığını (true, false) düşünürsek bu veri tipinin kullanılması işlerimizi
kolaylaştıracaktır.
Metoda
geçmeden önce, aşağıda 4 tane metot yer almaktadır. Bu 4 metot da aynı işi
yapmaktadır. İlk metot ADO.NET’ten vazgeçemeyenler, ikincisi Linq ve üçüncüsü
de Lambda expression kullanıcıları içindir. Dördüncü metot ise tek satır kod
ile işlerimizi halledebilmek için verilen bir metot örneğidir.
public
bool KullaniciAdKontrol_1(string kullaniciAd)
{
//# Girilen kullanıcı adının veritabanında olup olmadığını Boolean değişken
ile kontrol edeceğiz. sonuc değişkenimiz false ise girilen kullanıcı adı
veritabanımızda yok demektir.
bool sonuc = false;
//# Klasik bağlantı işlemlerimiz..
SqlConnection con = new SqlConnection("Data
Source=.;Initial Catalog=Forum;Integrated Security=True");
//# StringBuilder yardımı ile Sql tümcemizi yazacağız. Dikkat! Sql
Inception'lardan korunabilmek için her daim + ile string birleştirmelerden kaçının!
StringBuilder builder = new StringBuilder();
SqlCommand cmd = new SqlCommand(builder.AppendFormat("SELECT COUNT(ID) FROM Uyeler WHERE KullaniciAd =
'{0}'", kullaniciAd).ToString(), con);
//# Bağlantının durumu "kapalı"dan farklı ise bağlantıyı aç!
if (cmd.Connection.State != ConnectionState.Open)
cmd.Connection.Open();
//# Sorgumuz sonucunda tek bir değer(int) dönecektir. Söz konusu değer
girilen kullanıcı adına eşit olan kayıt sayısını verecektir. Bu sayının 0'dan büyük
olması sonuc değişkeninin true değerini aksi durumda false değerini almasını sağlayacaktır.
sonuc = Convert.ToInt32(cmd.ExecuteScalar()) > 0 ? true : false;
con.Close();
return sonuc;
}
Linq
teknolojisi ile bunu nasıl yaparız?
public
bool KullaniciAdKontrol_2(string kullaniciAd)
{
var
sorgu = (from u in
entity.Uyelers
where
u.KullaniciAd == kullaniciAd
select
u).Count();
if
(sorgu > 0)
return
true;
else
return
false;
}
Lambda
expression kullanarak sorgumuzu biraz daha kısaltabiliriz. Nasıl mı! İşte cevabı;
public bool KullaniciAdKontrol_3(string
kullaniciAd)
{
var
query = entity.Uyelers.Where(u => u.KullaniciAd == kullaniciAd).Count();
if
(query > 0)
return
true;
else
return
false;
}
Peki
son yazmış olduğumuz metodun daha kısa bir hali var mıdır? Tabi ki vardır.
Lambda expression yardımı ile metodumuzu tek satırda ifade etmek çok basit;
public bool KullaniciAdKontrol_4(string
kullaniciAd)
{
return
entity.Uyelers.Where(u => u.KullaniciAd == kullaniciAd).Count() > 0 ? true : false;
}
Bir
sonraki yazımızda görüşmek dileğiyle, hoşçakalın..