Logowanie przeszukiwanie list/bazy danych

0

Witam,
Napisałem taką funkcję, która zwraca mi list of string wypełnioną Loginami

public List<string> ZwrocLoginKlienta()
        {
            var query = from k in dc.Klienci
                        select k.login;
            return query.ToList();
        }

I teraz chciałbym uzupełnić to:

public bool SrpLoginHaslo(string login, string haslo)
        {
           //TODO                 
        }

Tylko nie za bardzo wiem jak to zrobić otóż nie wiem jak porównać login z listą lub można by to było od razu porównać z bazą danych, ale niestety też nie mam pomysłu jak to zrobić bardzo proszę o pomoc

0

Wiem że jest metoda Exists ale nie za bardzo wiem jak jej użyć.

0

Nie rozumiem... Najpierw zrwacasz z pierwszej metody listę stringów a potem w drugiej metodzie w parametrach jest login i hasło. Po co tam jest hasło?

0

będzie jeszcze później dodane także hasło jak ogarnę jak działa to porównanie, więc zaczynam od loginu hasłem później będę się zajmował.

0

Ok, to czego nie rozumiesz w funkcji Exists patrzyłeś w google na "C# exists example"?

0

Zrobiłem coś takiego:

public bool SrpLoginHaslo(string login, string haslo)
        {
           //TODO
           
            List<Klient> lista = ZwrocKlienta();
            if (lista.Exists(cus => cus.login == login && cus.haslo == haslo))
                return true;
            return false;
        }

myślicie że jest to dobrze ?

0

Przechwytywanie.PNG

po użyciu takiego kodu wywala mi taki błąd.

1

składniowo tak, logicznie tak, wydajnościowo nie.

 
public bool SrpLoginHaslo(string login, string haslo)
{
           //TODO
 
            List<Klient> lista = ZwrocKlienta();
            return lista.Exists(cus => cus.login == login && cus.haslo == haslo)
}

if jest niepotrzebny, bo funkcja Exists zwraca boola którego należy zwrócić dalej.

Pomyśl sobie co by było jakbyś w bazie miał 10 mln userów? Najpierw byś te 10mln userów sczytywał z bazy do programu i pakował na Listę 10 mln klientów. Potem byś tą listę przeszukiwał w c# żeby odnaleźć hasło. Na tym etapie w programie użytownik ma hasła wszystkich innych użytkowników, po po mu one? Powinieneś od razu w bazie sprawdzać, czy istnieje taki User...

Co do wyjątku

public bool SrpLoginHaslo(string login, string haslo)
{
        SrpLoginHaslo(string login, string haslo)
}
 

robisz coś takiego przecież.. wywołujesz funkcję która wywołuje samą siebie, która wywołuje samą siebie, która wywołuje samą siebie... i tak w nieskończonosć, bo nie masz nad tym zadnej kontroli. Po kilkuset miliardach wywołań kończy się przestrzeń na Stack (stosie) dlatego masz StackOverflowException...

0
public bool SrpLoginHaslo(string login, string haslo)
{
        service.SrpLoginHaslo(string login, string haslo)
}

rzeczywiście przeoczyłem powinno być tak

0

Działa.
Tylko rzeczywiście lepiej byłoby sprawdzać bezpośrednio bazę danych a nie pobierać dane z niej i dopiero później na liście sprawdzać. Podpowie ktoś jak to zrobić ?

0

Nie musisz sprawdzać bezpośrednio na bazie, wystarczy że wygenerujesz sensowne zapytanie z poziomu kodu. Np. w taki sposób:

public bool SrpLoginHaslo(string login, string haslo)
{
            return dataContext.Klienci.Exists(cus => cus.login == login && cus.haslo == haslo);
}

Tylko upewnij się przy użyciu SQL profilera, że do bazy leci rozsądne zapytanie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1