odiseh
odiseh

Reputation: 26517

How to handle null for a allow-null datetime field (DB) in our program?

How could we handle null for a datetime field (got from SQL Server) in our program in c#?

Upvotes: 6

Views: 8168

Answers (2)

Noon Silk
Noon Silk

Reputation: 55082

Use DateTime?

What problem are you having, specifically?

-- Edit

Just so it's clear, that's a Nullable DateTime object, not a question :)

DateTime? t = null;

-- Edit

Responding to comment, check it like so:

DateTime? theTime;

if( table["TheColumn"] == DBNull.Value ){
    theTime = null;
} else {
    theTime = (DateTime) table["TheColumn"];
}

Upvotes: 3

Marc Gravell
Marc Gravell

Reputation: 1062790

There are 3 common approaches here;

  • if you are talking about object (perhaps as you fetch it from a data-reader), then DBNull.Value can represent null. I don't tend to let this out of the data-layer, though
  • due to .NET 1.1 history, DateTime.MinValue is commonly interpreted as null; a magic number, maybe - but it works and is supported by most data-binding etc
  • in .NET 2.0, Nullable<T> means you can use DateTime? - i.e. a nullable-of-DateTime; just use DateTime? where-ever you mean a DateTime that can be null, and you can give it a value of null or a valid DateTime.

Some other thoughts on data-access and nulls:

  • when passing to a SqlCommand you must use DBNull.Value, not null - see below
  • when reading from a data-reader, I tend to check reader.IsDbNull(ordinal)

command stuff (with Nullable<T> as the example):

param.Value = when.HasValue ? (object)when.Value : DBNull.Value;

Upvotes: 12

Related Questions