Kontrola data   zodpovězená otázka

Databáze, .NET

Mám menší starost s kontrolou datumu. Kontroluju, zda-li není faktura po splatnosti:

If RepRow.datum_splaceni > RepRow.datum_splatnosti ...

Datum splacení může být v databázi NULL (faktura prostě není zaplacena). Jenomže, u toho porovnání mi neprojde ani kontrola isNot Nothing nebo DB.Null, takže nakonec to musím řešit try-catch (což se mi nelíbí).

Napadá někoho nějaké jiné řešení ?

Děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Databázové hodnotě Null je ekvivalentní DBNull.Value.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

ano vím, ale z nějakého divného důvodu mi tento kód

If RepRow.datum_splaceni Is DBNull.Value Then ...

hlásí:Is operator does not accept operands of type Date. Operands must be reference or nullable types.

Nevím jak to teď řešit a přidávat extra příznak do tabulky by sice řešení bylo, ale ...

update: ne s divného, ten důvod je samozřejmě napsán, ale nevím jak z tohoto kruhu ven

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Záleží, jakého typu je datum_splatnosti. Pokud je to Object, pak v něm je buď datum nebo hodnota DBNull.Value. Pokud je typu DateTime? neboli Nullable<DateTime>, tak tam je buď datum nebo Nothing. Pokud je jen typu DateTime, typicky tam bývá DateTime.MinValue, pokud chcete říct, že tam není nic.

Is se dá používat jen při porovnávání s Nothing, takže u ukázky kódu v příspěvku, na který odpovídám, má být =. DBNull.Value je jen speciální objekt, není to nic jako Nothing.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

děkuji za radu, nicméně i po změně na DBNull.Value mám error:

Overload resolution failed because no accessible = can be called with these arguments:

Public Shared Operator =(d1 As Date, d2 As Date) As Boolean: Value of type System.DBNull cannot be converted to Date.

Sloupec je typu Date.

No nic, jdu to překopat, prostě si přidám příznak do tabulky a bude to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud je sloupec typu Date, tak mít hodnotu DBNull.Value nemůže. Pak bude mít asi hodnotu DateTime.MinValue, ale čert ví.

Odkrokujte si to a podívejte se, jakou má datum hodnotu, když je v databázi NULL.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

tak pomocí DateTime.MinValue se to dá zjistit a ani to nehází vyjímku, pouze Warning. Děkuji za pomoc !

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Což ovšem není v pořádku. Jaký warning?

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback