#asp.net
#asp.net
Вопрос:
Кто-нибудь может помочь с этой ошибкой?
Переполнение SqlDateTime. Должно быть между 1/1/1753 12:00:00 утра и 31/12/9999 11: 59: 59 вечера.
Вот мой код:
<DataObjectMethod(DataObjectMethodType.Update)> _
Public Shared Sub UpdateIncident( _
ByVal DateClosed As DateTime, _
ByVal Description As String, _
ByVal original_IncidentID As Integer, _
ByVal original_ProductCode As String, _
ByVal original_DateOpened As DateTime, _
ByVal original_DateClosed As DateTime, _
ByVal original_Title As String, _
ByVal original_Description As String, _
ByVal IncidentID As Integer, _
ByVal ProductCode As String, _
ByVal DateOpened As DateTime, _
ByVal Title As String)
Dim con As New SqlConnection(GetConnectionString)
Dim up As String = "UPDATE Incidents " _
amp; "SET DateClosed = @DateClosed, " _
amp; "Description = @Description" _
amp; "WHERE IncidentID = @original_IncidentID " _
amp; "AND ProductCode = @original_ProductCode " _
amp; "AND DateOpened = @original_DateOpened " _
amp; "AND (DateClosed = @original_DateClosed " _
amp; "OR DateClosed IS NULL " _
amp; "AND @original_DateClosed IS NULL) " _
amp; "AND Title = @original_Title " _
amp; "AND Description = @original_Description"
Dim cmd As New SqlCommand(up, con)
If DateClosed = #12:00:00 AM# Then
cmd.Parameters.AddWithValue("DateClosed", DBNull.Value)
Else
cmd.Parameters.AddWithValue("DateClosed", DateClosed)
cmd.Parameters("DateClosed").DbType = DbType.DateTime
End If
cmd.Parameters.AddWithValue("Description", Description)
cmd.Parameters.AddWithValue("original_IncidentID", original_IncidentID)
cmd.Parameters.AddWithValue("original_ProductCode", original_ProductCode)
cmd.Parameters.AddWithValue("original_DateOpened", original_DateOpened)
cmd.Parameters("original_DateOpened").DbType = DbType.DateTime
If original_DateClosed = #12:00:00 AM# Then
cmd.Parameters.AddWithValue("original_DateClosed", original_DateClosed)
Else
cmd.Parameters.AddWithValue("original_DateClosed", original_DateClosed)
cmd.Parameters("original_DateClosed").DbType = DbType.DateTime
End If
cmd.Parameters.AddWithValue("original_Title", original_Title)
cmd.Parameters.AddWithValue("original_Description", original_Description)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Sub
Ответ №1:
Тип данных SQL Server datetime имеет диапазон: с 1 января 1753 по 31 декабря 9999
Тип данных .NET DateTime имеет диапазон: с 12:00:00 полуночи 1 января 0001 года нашей эры до 11:59: 59 вечера 31 декабря 9999 года нашей эры
Вы можете использовать новый тип данных SQL Server 2008: datetime2
Комментарии:
1. Пробовал это … все еще получаю ошибку … используя Visual Studio 2010… Есть другие идеи?
2. Что пробовал? изменение столбцов таблицы на datetime2?
Ответ №2:
Это происходит, когда у вас есть дата-время, которое вы не установили. Значение .NET DateTime.MinValue равно ’01/01/0001 00:00′, а минимальное значение SqlDateTime равно значению 1753. Просто убедитесь, что ни одно из ваших значений DateTime не остается неустановленным перед отправкой данных в базу данных.
Обновить:
В метод, который вы определили, добавьте некоторую логику для поиска и исправления переданных вам значений DateTime.MinValue. Пожалуйста, примите мой C#,
if (theDateTime < SqlDateTime.MinValue)
{
theDateTime = SqlDateTime.MinValue;
}
Комментарии:
1. Привет, Эд… Спасибо, но проблема в том, что некоторые записи в базе данных, над которыми я работаю, должны оставаться пустыми до тех пор, пока пользователь не войдет в систему и не добавит к ним DateClosed… Я не уверен, как изменить мой код, чтобы учесть это… Есть мысли… Я новичок! Не знаю, как исправить … это мой первый класс ASP
2. Упс! Нажмите enter слишком рано… Разве это не то, что я здесь сделал… Смотрите код: Если DateClosed = #12:00:00 AM#, то cmd.Parameters. AddWithValue(«DateClosed», DBNull. Значение) Else cmd.Parameters. Добавьте значение («DateClosed», DateClosed) cmd.Parameters(«DateClosed»). DbType = DbType.DateTime2 Заканчивается, если