3

I am using C# to interface with a SQL database. the database has a DateTime field. When I try to write a DateTime object from C#, I get the following error:

ERROR [22008] [Microsoft][ODBC SQL Server Driver]Datetime field overflow

I found this on the topic:

http://social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/ac1b5a6d-5e64-4603-9c92-b75ba4e51bf2/

Is there any manipulation I can do to my DateTime object on the C# side?

EDITS I am trying to add DateTime.MinValue

sbenderli
  • 3,654
  • 9
  • 35
  • 48

4 Answers4

5

Sounds like you are just passing in a bad date. For example, DateTime.MinValue is outside the accepted range for SQL Server datetime values by about 1600 years.

By the way, you shouldn't be using ODBC for C# to SQL Server communication. Using System.Data.SqlClient will give you much better performance.

Jonathan Allen
  • 68,373
  • 70
  • 259
  • 447
4

The .NET DateTime object has a bigger range than the SQL date/time field.

In your data access layer, anytime your writing a date to the database, ensure that is inside the rate of SqlDateTime.MinValue and SqlDateTime.MaxValue.

Mike Mooney
  • 11,729
  • 3
  • 36
  • 42
2

I'm quiet sure, your .NET DateTime is not initialized, what means it is "0000-01-01" and this is not a valid value for SQL Server DATETIME and often not a desired value ;-)

Florian Reischl
  • 3,788
  • 1
  • 24
  • 19
1

Change all your datetime columns to datetime2 type. Generate the sql scripts using the query below.

select distinct concat('alter table ', table_name, ' alter column ',  column_name, ' datetime2 ', 
case when(is_nullable = 'NO') then ' NOT ' else '' end, ' NULL;') 
from information_schema.columns where data_type = 'datetime';
Hainan Zhao
  • 1,962
  • 19
  • 19