6

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

2 Answers 2

12

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;
Sign up to request clarification or add additional context in comments.

Comments

3

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"];
}

3 Comments

I can not cast object (a column of DataRow) to DateTime .
Responded via edit. You just need to check if it is equal to DBNull.Value.
Okay ... You may like to post how you've solved it and mark it as accepted, so it helps anyone else who searches.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.