Skip to main content

Entity Framework, Sql Server 2008 why you should use DateTime2

If you’re using Sql Server 2008 with Entity Framework and have a DateTime field you have no doubt come across this error when Inserting or Updating an Entity

System.Data.SqlClient.SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

The problem here lies in the fact that the .NET DateTime.MinValue equals 0001-1-1 but the Sql Server DateTime only covers 1753-1-1 through 9999-12-31

The very simple solution is to use DateTime2 in Sql Server 2008 which covers 0001-1-1 through 9999-12-31.

DateTime2 has also has some other benefits.

Comments

  1. Thank you for pointing to this problem.I made some working pages for some tables and the error didn't appear.But when I deleted one of the tables and make a new relation in its place the error appeared.In both cases I was using SQL 2008 with Entity Framework but I think we should find out what exactly cause the error which unfortunatily I still don't know it and hope some one got the exact answer.

    ReplyDelete
  2. I changed my datetime columns to datetime2 but I still get the error is there something else I should do?

    ReplyDelete
  3. You need to check if any of your Date property is being set in code to a date outside of the range of accepted values 0001-1-1 through 9999-12-31.

    The best approach would be to use SQL Server Profiler and see what the raw SQL query looks like, this will tell you what property/field is causing the exception.

    ReplyDelete
  4. Hi Again,
    Very interesting...
    I have another table who I can insert to without any problems(Using Entity Framework).The date fields in that table are DateTime but even so using the SQL Profiler (as you told me) I see something like @2 datetime2(7)

    What does this mean? That table fields are DateTime I didn't change them so why I'm seeing @2 datetime2(7) I don't understand?!

    ReplyDelete
  5. wrong. If you insert '0001-01-01' then there is something wrong with your code and structure. Because:
     - that should mean that there is no date and then you should have a null
     - somewhere in code you forgot to set that field.

    Fix the cause not the effect.

    ReplyDelete
  6. Agreed that you should use a nullable date if that is the intent but you're assuming '0001-01-01' would never be a valid date value by the application. If you want to allow date values from 0001-1-1 through 9999-12-31 then you need to use DateTime2.

    ReplyDelete

Post a Comment

Popular posts from this blog

Freeing Disk Space on C:\ Windows Server 2008

I just spent the last little while trying to clear space on our servers in order to install .NET 4.5. Decided to post so my future self can find the information when I next have to do this. I performed all the usual tasks: Deleting any files/folders from C:\windows\temp and C:\Users\%UserName%\AppData\Local\TempDelete all EventViewer logs Save to another Disk if you want to keep themRemove any unused programs, e.g. FirefoxRemove anything in C:\inetpub\logsRemove any file/folders C:\Windows\System32\LogFilesRemove any file/folders from C:\Users\%UserName%\DownloadsRemove any file/folders able to be removed from C:\Users\%UserName%\DesktopRemove any file/folders able to be removed from C:\Users\%UserName%\My DocumentsStop Windows Update service and remove all files/folders from C:\Windows\SoftwareDistributionDeleting an Event Logs Run COMPCLN.exe Move the Virtual Memory file to another disk However this wasn’t enough & I found the most space was cleared by using the Disk Cleanup to…

CPF Contribution Rates for new Singapore Permanent Residents (SPR’s)

Recently my wife and I applied and got approved for Singapore Permanent Residency. After completing the formalities the most significant immediate change is the contribution to CPF which is Singapore’s mandatory social security savings scheme requiring contributions from employers and employees. CPF contributions start from the date you obtain SPR status, which is the date of the entry permit.   Being a relentless budgeter I needed to know exactly how much I and my employer would have to contribute so that I could adjust my budget accordingly as the employee contributions get deducted from the monthly salary. After doing some research I discovered that there is a “graduated” approach to CPF contributions for new SPR’s where the contributions gradually increase in the first and second year and then upon reaching the third year are at the full amount. Note: There is an option for employers to contribute the full amount for year 1 and year 2 and the employee can use the graduated rate, b…

Consuming the SSRS ReportExecutionService from a .NET Client

I’ve just finished writing a nice wrapper which internally calls the SSRS ReportExecutionService to generate reports.
Whilst it was fairly simple to implement there has been some major changes between 2005 and 2008 and the majority of online and documentation is based on the 2005 implementation. The most important change is that the Report Server and Report Manager are no longer hosted in IIS which will be a welcomed change to Sys Admins but makes the security model and hosting model vastly different. So far I’ve yet to figure out how to allow Anonymous Access, if anyone knows how to do this leave a comment and it will be most appreciated. Getting StartedTo get started you’ll want to add a service reference to http://localhost/ReportServer_SQL2008/ReportExecution2005.asmx where ReportServer_SQL2008 is the name you configure in the Reporting Services Configuration Manager. The Web Application files are located in C:\Program Files\Microsoft SQL Server\MSRS10.SQL2008\Reporting Servic…