2014-10-30 5 views
0

Я вызываю хранимую процедуру из службы WCF с использованием Linq-to-sql. Функция подпись определяются в файле конструктора, как:Ошибка Преобразование DateTime в Date

public int MS_SetTimeKeeperRecord(... global::System.Data.Linq.Mapping.ParameterAttribute(Name="ReportDate", DbType="Date")] System.Nullable<System.DateTime> reportDate, ...) 

параметра, передаваемый в reportDate является переменным типа С # DateTime, и нет такого понятия, как переменные в Date типа. Я получаю следующее сообщение об ошибке при вызове:

Преобразование типа данных даты к типу DateTime данных привело к вне-диапазона значения

поле ввода не равно нулю.

Как это сделать?

ответ

0

C# DateTime MinValue - 00:00:00.0000000, January 1, 0001., но если я не ошибаюсь, то значение mintime-времени SQL min равно 1753-01-01 00:00:00.000. Вы можете получить эту ошибку, если пытаетесь передать значение меньше, чем SQL min datetime. Также SQL max datetime - 9999-12-31 23:59:59.997, но C# max DateTime - 23:59:59.9999999, December 31, 9999.

Update:

Ошибка преобразования с даты, даты-времени. Date в SQL имеет разные пределы до datetime, его диапазон 0001-01-01 through 9999-12-31, но диапазон datetime как указано выше. Так что независимо от значения, это вне диапазона для типа datetime, хотя, как упоминалось в комментариях, вы используете дату.

http://msdn.microsoft.com/en-us/library/bb630352.aspx

http://msdn.microsoft.com/en-us/library/ms187819.aspx

+0

Да, но он использует 'date' в SQL Server, который имеет диапазон 1/1/0001 через 12/31/9999 ..... SQL Server' DATETIME' имел минимальное значение '1/1/1753', но ** не **' DATE' или 'DATETIME2' .... –

+0

@marc_s Да, верно, не обращал на это внимания, я обновил ответ. Благодарю. – artm

Смежные вопросы