0

以下のデータベース構造を見てください。

CREATE TABLE TestStartDate (PersonID int, StartDate datetime NOT NULL)
INSERT INTO TestStartDate VALUES(1,'1899-12-30')

そして以下のコード:

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Dim objCommand As SqlCommand, objCommand2 As SqlCommand
        Dim objCon As SqlConnection
        Try
            objCommand = New SqlCommand
            Using objCommand
                Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True;MultipleActiveResultSets=true"
                objCon = New SqlConnection
                Using(objCon)
                    objCon.ConnectionString = strConString
                    objCon.Open()
                    objCommand.Connection = objCon
                    objCommand.CommandText = "select startdate from TestStartDate "
                    Dim objDR As SqlDataReader = objCommand.ExecuteReader
                    If objDR.HasRows Then
                        objDR.Read()
                        Using objCon
                            objCommand2 = New SqlCommand
                            Using objCommand2
                                objCommand2.Connection = objCon
                                objCommand2.CommandText = "INSERT INTO TestStartDate (StartDate) VALUES (@StartDate)"
                                objCommand2.Parameters.AddWithValue("@StartDate", DateValue(objDR("StartDate"))) 'line 24
                                'objCommand2.Parameters.AddWithValue("@StartDate", objDR("StartDate")) 'line 25
                                objCommand2.ExecuteNonQuery() 'Line 26
                                Dim date1 As Date = objDR("startdate")
                            End Using
                        End Using
                    End If
                End Using
            End Using
        Catch ex As Exception
            Throw
        Finally

        End Try
    End Sub

コードは 26 行目で例外をスローします (26 行目は注釈付きです)。

SqlDateTime オーバーフロー。1753 年 1 月 1 日午前 12:00:00 から 9999 年 12 月 31 日午後 11:59:59 までの間である必要があります

行 24 をコメントアウトし、行 25 をコメント解除することでこれを解決できます。なぜDATEVALUEこの例外が発生するのですか?

次の Web ページを見ました: http://msdn.microsoft.com/en-us/library/6d6k22a5%28v=vs.80%29.aspx。これは、DATEVALUE が 30/12/1899 を 01/01/01 に変換している可能性があることを示唆しています (01/01/01 は SQL Server で許容される値ではありません)。この場合、1899 年 12 月 30 日が 01/01/01 に変換されるのはなぜですか?

4

0 に答える 0