Хранимая процедура SQL Server 2008 с DateTime2 - PullRequest
2 голосов
/ 19 августа 2011

У меня небольшой вопрос о хранимых процедурах и типе данных DateTime2 в SQL Server 2008.

Я получил несколько хранимых процедур с использованием типа данных DateTime2 и хочу вставить дату 0001.01.01 00:00:00, ноэто не будет работать с VB.net, и я не могу найти причину.

Я использую этот фрагмент кода:

Dim sqlStatement As New SqlClient.SqlCommand
Dim sqlTransaction As SqlClient.SqlTransaction
sqlStatement.CommandType = CommandType.StoredProcedure
sqlStatement.CommandText = "SCHEMA.spInsertDate"
sqlStatement.Parameters.AddWithValue("@Date", "0001.01.01 00:00:00")
sqlStatement.ExecuteNonQuery()

для вызова хранимых процедур из моей программы (хранимой процедурыявляется простым INSERT заявлением, ничего более и прекрасно работает с фактическими датами).Но когда я ввожу дату 0001.01.01 00:00:00, всегда возникает ошибка, что я не могу вставить даты до «01. 01.1753», когда я хочу выполнить хранимую процедуру.

Теперь я уже знаю, что тип данных DateTime2 в SQL Server должен поддерживать это.

Так что мой вопрос: возможно ли, что это проблема с драйвером, и обновление SQLClient решит эту проблему, или это общая проблема, и я наконец могу прекратить поиск и использовать 1753.01.01.

Спасибо Лим

1 Ответ

6 голосов
/ 19 августа 2011

Если вы ничего не указали для параметра SQL и используете метод .AddWithValue(), я считаю, что ADO.NET по умолчанию будет использовать SqlDbType.DateTime, который имеет это ограничение в своем диапазоне (без дат до 01.01.1753). ).

Вам необходимо явно определить тип данных вашего параметра с помощью этого вызова:

SqlParameter dateTime2Param = sqlStatement.Parameters.Add("@Date", SqlDbType.DateTime2);
dateTime2Param.Value = "0001.01.01 00:00:00";

Тогда это должно сработать, я считаю. В перечислении SqlDbType этот тип DateTime2 добавлен в .NET 3.5

...