SQL i inne bazy danych mają wartość NULL. Kiedy np pewna data jest nieznana, zapamiętujesz w niej NULL i już wiadomo, że data jest jeszcze nieokreślona. Rodzi się jednak problem jak tego nulla obsługiwać w aplikacjach w .NET.
Do typu DateTime nie można przypisać wartości null. Można za to wykorzystać typ DateTime? , który już przyjmuje wartość null.
Kiedy chcesz się odwołać do zmiennej x typu DateTime? musisz to zrobić tak:
if(x.HasValue) {
string s = x.Value.ToString()
}
Kiedy masz procedurę i chesz do niej przekazać NULL możesz skorzystać z DBNull.Value. Dzieje się tak dlatego, że null w .NET to trochę co innego niż NULL w bazie danych. Rzutowanie na typ object było potrzebne, aby pozbyć się komunikatu o niegodności typów:
myCommand.Parameters["@receivedDate"].Value =
(r.ReceivedDate == null ? (object)DBNull.Value : r.ReceivedDate.Value);