Nullable Dates

G

Guest

I have a start and end date in my application. If a user does not know their
dates yet, I want them, they will be null in the DB and I want them to be
blank in the application. So, I'm trying to figure out how to use a nullable
date, and want to return it in my method.

I tried to cast the output parameter, but I get a run-time cast error:
return new TimeLine((DateTime?)command.Parameters["@startDate"].Value,
(DateTime?)command.Parameters["@endDate"].Value);


Then I changed to the code to what you see below, and it worked. But I am
wondering is there a better way to do this when working with nullable dates?

DateTime? startDate;
DateTime? endDate;

if (command.Parameters["@startDate"].Value is DBNull)
startDate = null;
else
startDate = (DateTime?)command.Parameters["@startDate"].Value;

if (command.Parameters["@endDate"].Value is DBNull)
endDate = null;
else
endDate = (DateTime?)command.Parameters["@endDate"].Value;

return new TimeLine(startDate, endDate);
 
J

Jon Skeet [C# MVP]

I have a start and end date in my application. If a user does not know their
dates yet, I want them, they will be null in the DB and I want them to be
blank in the application. So, I'm trying to figure out how to use a nullable
date, and want to return it in my method.

I tried to cast the output parameter, but I get a run-time cast error:
return new TimeLine((DateTime?)command.Parameters["@startDate"].Value,
(DateTime?)command.Parameters["@endDate"].Value);

Then I changed to the code to what you see below, and it worked. But I am
wondering is there a better way to do this when working with nullable dates?

The simplest way would be:

DateTime? startDate = command.Parameters["@startDate"].Value as
DateTime? ;
DateTime? endDate = command.Parameters["@endDate"].Value as
DateTime? ;

That will work, *but* it will give you null for start/end dates which
are neither DBNull nor DateTime. In other words, it will hide the
error. If you want more rigour, I'd write a helper method to convert
object to DateTime, throwing an exception if the parameter is neither
a DateTime nor DBNull.Value.

Jon
 
I

Ignacio Machin \( .NET/ C# MVP \)

Hi,

Jon Skeet said:
I have a start and end date in my application. If a user does not know
their
dates yet, I want them, they will be null in the DB and I want them to be
blank in the application. So, I'm trying to figure out how to use a
nullable
date, and want to return it in my method.

I tried to cast the output parameter, but I get a run-time cast error:
return new TimeLine((DateTime?)command.Parameters["@startDate"].Value,
(DateTime?)command.Parameters["@endDate"].Value);

Then I changed to the code to what you see below, and it worked. But I am
wondering is there a better way to do this when working with nullable
dates?

The simplest way would be:

DateTime? startDate = command.Parameters["@startDate"].Value as
DateTime? ;
DateTime? endDate = command.Parameters["@endDate"].Value as
DateTime? ;

That will work, *but* it will give you null for start/end dates which
are neither DBNull nor DateTime. In other words, it will hide the
error. If you want more rigour, I'd write a helper method to convert
object to DateTime, throwing an exception if the parameter is neither
a DateTime nor DBNull.Value.

If the columns in the DB are of DateTime then it will work as expected.
 
J

Jon Skeet [C# MVP]

If the columns in the DB are of DateTime then it will work as expected.

Indeed. I was just warning that if the columns were changed
inappropriately, it would fail silently (by returning null) rather than
screaming from the rooftops about the type being wrong :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top