Нужна помощь в устранении ошибки переполнения SqlDateTime

#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 Заканчивается, если