C# DateTime.MinValue is not the same as SqlDateTime.MinValue
Working 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
RSS ?
12 comments on this post
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.
Had I known that little gem I probably would have
. I just switched from .Net 1.1 about 6 months ago so I don’t know all the newest features yet.
yeah this has been a savior many times for me.
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
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.
If you’re not sure if a string will be parsed as a DateTime you should be using DateTime.TryParse().
@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.
“Sadly SqlDateTime does not have a TryParse method.”
Sounds like a good example for an Extension method…
@Ian, indeed it does. I’ll see what I can whip up in the next couple days. Feel free to post any advice.
3 Trackback(s)