C# Problem z bazą danych


(Przemek89k) #1

Cześć,

mam problem - wywala mi błąd "The source contains no DataRows." :

public IListSource znajdz_nazwisko2(string nazwisko){


                     var nazwiska = from osoba in baza.Pracownicy where osoba.nazwisko.StartsWith(nazwisko) select osoba;

                     IListSource lista;

                   [b] lista = nazwiska.CopyToDataTable();[/b]

                     return lista;


        }

Chodzi dokładnie o tę linijkę podkreśloną - nie wiem jak sprawdzić wcześniej czy moja zmienna " var nazwisko" zawiera jakieś dane ? Próbowałem to robić na różne sposoby np.

if(nazwiska.CopyToDataTable().Rows != null)

Ale tutaj także się sypało - zapewne dlatego, że najpierw wykonywana jest funkcja CopyToDataTable() - bez sprawdzenia datarows. Jednak próbowałem szukać dostępnych metod dla samej zmiennej "var nazwiska" - jednak niczego specjalnego nie znalazłem...

Wszystko działa dobrze w momencie gdy zapytanie ( from osoba in baza.Pracownicy where osoba.nazwisko.StartsWith(nazwisko) select osoba;) zwróci jakieś wiersze, jeżeli niczego nie zwróci to wtedy pojawia się błąd - jak go wyeliminować ?

Proszę o pomoc :slight_smile:


(Blapiter) #2

Taka składnia sprawdza czy coś jest w "nazwiska":

if(nazwiska != null)

Czyli coś w ten deseń:

public IListSource znajdz_nazwisko2(string nazwisko)

        {


             var nazwiska = from osoba in baza.Pracownicy where osoba.nazwisko.StartsWith(nazwisko) select osoba;

             if (nazwiska != null)

             {

                 IListSource lista;

                 lista = nazwiska.CopyToDataTable();

                 return lista;

             }

             else

             {

                 return null;

             }


        }

(Przemek89k) #3

Nie działa ten sposób : w przypadku gdy zapytanie nie zwróci żadnych danych to i tak wchodzi do tego if'a -> nazwiska != null... i wyświetla błąd The source contains no DataRows.

. Musi być zatem jakiś inny sposób, który sprawdzi czy jest to element zawierający datarows.


(Mazquick Tv) #4

A nie da rady policzyć tych DataRows? Np. jeżeli będzie > 0 to rób:

IListSource lista;

lista = nazwiska.CopyToDataTable();

return lista;

A jeżeli = 0 to:

return null;

Teraz nie sprawdzę tego dokładnie, bo jestem świeżo po formacie, ale powinno być coś z Count, albo Rows.Count.

Dobrze by też było sprecyzować typ danych pobieranych z bazy, wtedy ułatwiło by to zadanie bo z var'em za dużo nie zdziałamy...


(Blapiter) #5

Faktycznie w końcu przetestowałem i ten zapis

if(nazwiska != null)

Można zastosować tylko przy dodatkowej funkcji np:

var nazwiska = (from osoba in baza.Pracownicy where osoba.nazwisko.StartsWith(nazwisko) select osoba).FirstOrDefault();

w przypadku standardowego zapytania

var nazwiska = from osoba in baza.Pracownicy where osoba.nazwisko.StartsWith(nazwisko) select osoba;

Trzeba zastosować

if(nazwiska.Any())