I have an issue while converting “March 16-17” to DateTime and saving it to SQL server. “March 16-17” as it looks, read as March 16 to March 17, which in my case is invalid, but C# DateTime.TryParse() is treating “March 16 -17” as March 16, 2017 which is wrong, and saving the data in SQL server. SQL server treats “March 16-17” as invalid. So, can some body tell me how to use SQL server datetime validation in C#.
Thanks
Ashwani
It sounds as if the value shouldn’t be a DateTime at all. Instead it should be a string (varchar/nvarchar) or two DateTime values (start and end). I.e., why are you trying to call
DateTime.TryParseorDateTime.TryParseExactin the first place? If you want to store them as dates, you’ll need to force the users to enter them as dates (as in two date values in your example) and then you can easily store them as dates. If you want to allow users to enter “March 16-17” or “Spring 2010” or “Last half of March”, then use a varchar or nvarchar data type.EDIT Given what you have said in comments, it sounds like you are passing the XML directly to SQL Server and hoping to have SQL Server parse the dates. Unfortunately, SQL Server is not great a parsing as you have discovered. IMO, it would be easier to rebuild the XML in C#, validating and parsing dates and integers, before you pass it to SQL Server. I.e., I would try to do as little of this type parsing and validation in SQL Server as possible. If you still want to go that route, another solution would be to create a CLR function (which means the CLR must be enabled) that would give you the same date parsing functionality as C#.
EDIT After much discussion, it sounds like the issue is that C#’s date parser is too clever for your purposes. What you want is for C# to invalidate the date as SQL Server would. I can think of a couple of ways to solve that:
DateTime.TryParseExactmethod. The downside is that this is far less forgiving in terms of parsing date values.Trying to actually use SQL Server’s date parsing will not work unless you push the data into a character column and then use SQL Server’s
IsDateandCastfunctions to populate the DateTime column after you have populated the data.