C# DateTime.MinValue is not the same as SqlDateTime.MinValue

SQL

kick it on DotNetKicks.comWorking with non-nullable types in C# can be a bit of a pain. For instance when I have a date as a string and need to parse it into a DateTime what should the value be if the parse fails? I can’t use null because DateTime is not a nullable type.This is exactly the dilema I encountered today. No worries, I’ll use DateTime.MinValue that way it is constant and I don’t have to worry about being consistent if I had chosen an arbitrary value of my own.Well as it turns out I did have some worries. Sql Server 2000′s minimum DateTime value is not the same, in fact it is quite different. realtor . atlanta georgia attorney . This kept causing errors.For your reference here are some values you should take note of.

DateTime myDate = DateTime.MinValue; //=> 1/1/0001SqlDateTime mySqlDate = SqlDateTime.MinValue; //=> 1/1/1753//also note that SQL Server's smalldatetime min value is 1/1/1900

So my problem was easily averted, after a quick Google search. I just had to use SqlDateTime.MinValue instead of DateTime.MinValue.Cheers

12 comments on this post

Mar 26, 2008 - 05:03:13

Why don’t you use a nullable date time?

DateTime? whateverDate = null;

The question mark makes the datetime nullable, it actually works for any struct type even Enums.

Justin says:
Mar 26, 2008 - 06:03:50

Had I known that little gem I probably would have :D . I just switched from .Net 1.1 about 6 months ago so I don’t know all the newest features yet.

Mar 30, 2008 - 05:03:48

yeah this has been a savior many times for me.

Miron says:
Mar 30, 2008 - 07:03:23

Hey,
I posted about this subject few month ago.
Take a look at the link:
http://mironabramson.com/blog/post/2007/09/Caution-When-passing-Null-or-DateTime-into-Store-Procedure.aspx

Mar 30, 2008 - 11:03:13

Still good to know though… I’ve been in situations where I haven’t wanted to make a db datetime nullable, so this info is very handy. Cheers Justin.

Mar 31, 2008 - 01:03:13

If you’re not sure if a string will be parsed as a DateTime you should be using DateTime.TryParse().

Justin says:
Mar 31, 2008 - 02:03:47

@Adrian, this is true but if the parse fails it assigs a value of DateTime.MinValue which causes an SQL error which is the situation that lead to this post int he first place. Sadly SqlDateTime does not have a TryParse method.

Ian says:
Apr 1, 2008 - 01:04:46

“Sadly SqlDateTime does not have a TryParse method.”

Sounds like a good example for an Extension method…

Justin says:
Apr 1, 2008 - 04:04:36

@Ian, indeed it does. I’ll see what I can whip up in the next couple days. Feel free to post any advice.