Problem z wartością DBNull baza danych C#


(Przemek89k) #1

Hej,

mam problem z wartością DBNull - a dokładniej mam taki kod :

public List dzienne_zlecenie(string data)

        {

            var zlecenia = from zlecenie in baza.Zlecenia where zlecenie.Isdata_realizacjiNull() != true where zlecenie.data_realizacji.Date.ToShortDateString() == data select zlecenie;

            if (zlecenia.Any())

            {

                List lista;

                lista = zlecenia.ToList();

                return lista;

            }

            else return null;

        }

Kod działa poprawnie tzn. pobiera z bazy danych listę zleceń a całość dostaję jako listę : List - taką chcę dostać ! Problem jednak jest w tym, że gdy korzystam z tego i w bazie danych znajdzie się wartość DBNull (np. pole imie nie będzie miało wartości) to wtedy program się sypie. Jak poprawić kod, abym w rezultacie dostawał określony typ listy tzn. List i aby wyeliminować wartości DBNull (zamiast nich mają być puste stringi albo coś innego co ma wartość :P). Mogę to zrobić w ten sposób, że :

var zlecenia = from zlecenie in baza.Zlecenia where zlecenie.Isdata_realizacjiNull() != true where zlecenie.data_realizacji.Date.ToShortDateString() == data select new {


i tutaj sprawdzam czy jest DBNULL


}

Ale w ten sposób dostanę typ anonimowy i w efekcie nie dostanę typu na którym mi zależy...

Dziękuję za pomoc


(Ground21) #2

Generalnie to dziwne dla mnie jest, że na forum dobrychprogramów znajdują się posty na temat programowania. Są po prostu inne fora od tego.

Tzn?

Pokaż definicję klasy, której kolekcje obiektów chcesz zwracać a dam Ci wskazówkę co zrobić z nullami.


(Przemek89k) #3

Zwracam listę obiektów w postaci wierszy Dataset - zobacz kod powyżej.


(Ground21) #4
var zlecenia = from zlecenie in baza.Zlecenia where zlecenie.Isdata_realizacjiNull() != true where zlecenie.data_realizacji.Date.ToShortDateString() == data select new ZleceniaRow() { Imie = zlecenie.Imie ?? String.Empty, Nazwisko = zlecenie.Nazwisko, Ulica = zlecenie.Ulica };

(Przemek89k) #5

Dzięki - właśnie z czymś podobnym ostatnio kombinowałem :wink:

-- Dodane 28.02.2012 (Wt) 15:04 --

Jednak za szybko odpowiedziałem, okazuje się że jest błąd :

var sprzety = from sprzet in baza.Sprzet.AsEnumerable() select new Baza_z_relacjamiDataSet.SprzetRow() { opis = sprzet.opis; };

'Skuteczne_zarzadzanie.Baza_z_relacjamiDataSet.SprzetRow' does not contain a constructor that takes 0 arguments

Rozumiem, że trzeba w tym konstruktorze coś dodać (DataRowBuilder) ale nie wiem jak go zbudować... ponieważ jeżeli dam tylko new Baza_z_relacjamiDataSet.SprzetRow(new DataRowBuilder()) to po odpaleniu wyskoczy błąd :

The type 'System.Data.DataRowBuilder' has no constructors defined