Yanıt 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
     
     Yanıt

    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:14
    Moderatör
     
     Yanıt Kod İçerir
    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
     
      Kod İçerir

    "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 If
    


    Mustafa 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:57
    Moderatö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.
  • 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:12
     
     
    kullanı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.