Linq to sql ile kullanıcı giriş sorgusu hk.
-
19 Nisan 2012 Perşembe 08:23
Merhaba Arkadaşlar,
Linq to sql ile Kullanıcı giriş formunun sorgusunu yazmaya çalıştım fakat bir türlü yapamadım. Yapamadığım nokta ise;
Normal sql sorgularında ilgili sorguyu datatable'ye alıp If -Else blokları ile kontrol edip ona göre işlemler yaptırabiliyordum.
Örnek; if dt.rows.count = textkullaniciad.text Then
Messagebox.show("giriş başarılı")
Elseif dt.rows.count <> textkullaniciad.text Then
Messagebox.show("giriş başarısız.")
gibi...
Fakat bunu linq te yapamadım. İlgili kodu aşağıda paylaşıyorum.
Dim dc As New DataClasses1DataContext
Dim KullaniciGiris = (From c In dc.Kullanicilars Where c.KullaniciAdSoyAd = TextKullaniciAd.Text And c.KullaniciParola = TextParola.Text)
Yukarıdaki kodu nasıl kontrol edebilirim?
Syg.
Tüm Yanıtlar
-
19 Nisan 2012 Perşembe 08:36
aynı yukarıdaki gibi yapmalısın;
c# için yazıyorum ben
if(KullaniciGiris .Count() > 0)
{
//giriş başarılı
}
else
{
//giriş başarısız
}
bir de sorgu cümlenin sonunda "select c" kelimesi olmalı (c# için böyle vb için böyle olmayabilir);
Dim KullaniciGiris = From cIn dc.Kullanicilars Where c.KullaniciAdSoyAd = TextKullaniciAd.TextAnd c.KullaniciParola = TextParola.Text select c;
Mustafa Torun
- Yanıt Olarak İşaretleyen levent_ozturk 19 Nisan 2012 Perşembe 08:45
- Yanıt İşaretini Geri Alan levent_ozturk 19 Nisan 2012 Perşembe 16:43
- Yanıt Olarak İşaretleyen levent_ozturk 20 Nisan 2012 Cuma 16:55
-
19 Nisan 2012 Perşembe 08:45
Merhaba Mustafa Bey,
Yardımınız için teşekkür ederim,
if KullaniciGiris.Count > 0 Then
Yukarıdaki gibi yapmak aklıma gelmemiş:)
Tekrar tşk.iyi günler.
-
19 Nisan 2012 Perşembe 16:48
Merhabalar,
Mustafa Bey sorumun büyük kısmını cevapladı fakat benim atladığım bir nokta olmuş.
Kullanıcı giriş yaparken yetki seviyesini de almak istiyorum. Bunu nasıl yapabilirim.
Dim dc As New DataClasses1DataContext
Dim KullaniciGiris = (From c In dc.Kullanicilars Select c.YetkiSeviyesi, c Where c.KullaniciAdSoyAd = TextKullaniciAd.Text AndAlso c.KullaniciParola = TextParola.Text Select c)
'Burada kullanıcı db'de var ise giriş yapılıyor yok ise mesaj verdiriliyor.
If KullaniciGiris.Count > 0 Then
G.Show()
'Burada kullanıcı giriş yaptıktan sonra YetkiSeviyesi 'ni kontrol edip x değişkene alıp formlarda bazı kısıtlamalar yapmak istiyorum.
Else
MessageBox.Show("Giriş Başarısız.")
End If
Yardımınız için şimdiden teşekkür ederim.
Syg.
-
19 Nisan 2012 Perşembe 22:14Moderatör
if ( dc.Kullanicilars.Any ( function( c ) _ c.KullaniciAdSoyad = textKullanici.Text and _ c.KullaniciParola = textParola.text ) ) '...
Ya da hem bakıp hem almak için:
dim kullanici = dc.Kullanicilars.SingleOrDefault ( function( c ) _ c.KullaniciAdSoyad = textKullanici.Text and _ c.KullaniciParola = textParola.text ) if ( kullanici isnot nothing ) ' ...
- Yanıt Olarak İşaretleyen levent_ozturk 20 Nisan 2012 Cuma 16:55
-
20 Nisan 2012 Cuma 11:48
"kullanicigiris" zaten kullanicilar tablondaki bir satır. aşağıdaki kodda kullanicigiris.yetki yada .yetkiseviyesi olarak istediğin alanına ulaşabilirsin.
If KullaniciGiris.Count > 0 Then if KullaniciGiri.Yetki > 5 then . . . G.Show() Else MessageBox.Show("Giriş Başarısız.") End IfMustafa Torun
-
20 Nisan 2012 Cuma 16:14
Merhaba Mustafa Bey,
Dim dc As New DataClasses1DataContext
Dim KullaniciGiris = (From c In dc.Kullanicilars Where c.KullaniciAdSoyAd = TextKullanici.Text And c.KullaniciParola = TextParola.Text)
'Burada kullanıcı db'de var ise giriş yapılıyor yok ise mesaj verdiriliyor.
If KullaniciGiris.Count > 0 Then
'If KullaniciGiris. dediğimde nokta dan sonra method lar geliyor fakat tablo ile ilgili bilgiler gelmiyor.
Yardımcı olmaya çalıştığınız için teşekkür ederim. Uğraştırıyorum sizleri sağolun.
G.Show()
Else
MessageBox.Show("Giriş Başarısız.")
End If
Bu yüzden tekrar yardım istemek zorunda kaldım.
-----------
Çetin bey'in yazdıklarını da deneyip burada sonucu paylaşacağım.
Syg.
-
20 Nisan 2012 Cuma 16:55
Merhaba Çetin Bey,
Yardımınız için çok teşekkür ederim. Yazdığınız kodlar ile sorunu çözdüm. İlgili kodların tamamını aşağıda paylaşıyorum. Başka arkadaşlara da yardımcı olabilir belki:)
Dim dc As New DataClasses1DataContext
Dim kullanici = dc.Kullanicilars.SingleOrDefault(Function(c) _
c.KullaniciAdSoyAd = TextKullanici.Text And _
c.KullaniciParola = TextParola.Text)
KullYet = Nothing
If (kullanici IsNot Nothing) Then
MessageBox.Show("Giriş Başarılı")
If (kullanici.YetkiSeviyesi = 0) Then
MessageBox.Show("Yetki 0")
End If
If (kullanici.YetkiSeviyesi = 1) Then
MessageBox.Show("Yetki 1")
End If
Else
MessageBox.Show("Giriş Başarısız.")
End If
@Mustafa Bey size de çok teşekkür ederim. Yardımcı olmaya çalıştınız. Sağolun.
Hayırlı akşamlar diliyorum.
-
20 Nisan 2012 Cuma 16:57Moderatör
Gelmez cunku yanlis yapiyorsunuz.
KullaniciGiris, sizin yaptiginiz sekilde bir IQueryable. Daha yalin soylemek gerekirse Count > 0 ise, tek kayit bile olsa, o bir kayit dizisi gibi. Tek bir kayit olarak algilanmiyor. Sonucta siz hala tablonun bazi satirlariyla ugrasiyor gibisiniz.
KullaniciGiris.First(). derseniz alan adalri da gorunur ama kulagini tersten gostermek gibi olur. Yapmak istedigininiz tek kayda ulasmak. Dogrudan SingleOrDefault() kullanin. Sonuc null ise kayit yoktur (Count=0 durumu). Diger durumda ise elinizde dogrudan o kullanici var.
dim kullanici = db.tabloAdi.SingleOrDefault( < kriter > )
if ( kullanici isnot nothing )
Console.WriteLine( kullanici.AlanAdi )
end if
gibi.
Not: SingleOrDefault() sonucun tek kayit olmasi gereken yerlerde kullaniliyor. Primary Key ile arama gibi. Eger senin kayitlarinda ayni kullaniciAdi ve parolasi ile birden fazla kayit varsa hata verecektir. FirstOrDefault() ayni isi gorur ve hata vermez. Ancak o zaman da uygulamada mantiksal bir hata var demektir (yakalanmasi cok guc bir hata). Bu oldugunda iki farkli kullanici biribirlerinin yazip cizdigini gormeye baslar.- Düzenleyen CetinBasozModerator 20 Nisan 2012 Cuma 17:04
-
20 Nisan 2012 Cuma 20:02
Merhaba Çetin Bey,
SingleOrDefault() ile FirstOrDefault olayını çok güzel açıklamışsınız. Doğrusunu söylemek gerekirse bilmiyordum. Çok güzel bir bilgi oldu benim için.
Kayıtlarımda aynı kullanıcı adı olmayacak fakat parola belki aynı olabilir bu sorun olurmu acaba ? sorun olursa ilgili tablonun parola alanını kontrol edip ( aynı parola kullanılıyor ) uyarısı alıp farklı parola girişi yaptırmak geliyor aklıma :)
Syg.
-
20 Nisan 2012 Cuma 20:12kullanıcı adı unique ise parolanın aynı olması problem olmayacaktır.
Mustafa Torun
-
20 Nisan 2012 Cuma 21:23
Kullanıcı adı unique değil ama hemen unique olarak düzeltiyorum :)
Yardımlarınıza teşekkür ederim Mustafa Bey. İyi Geceler.