vb.net SQL日期到时间转换问题

时间:2011-03-27 14:09:35

标签: sql sql-server vb.net date

错误是:从字符串转换日期和/或时间时转换失败。

基本上我正在尝试这样做,以便当有人点击列表框中的某个位置时,它会将Stats表中的正确字段增加1,表示他们点击了该位置。我一直试图解决这个问题一段时间,无法到达任何地方。我的日期是日期格式,我的统计表中的日期字段也是如此。我的代码可以在下面看到。

    Dim Current As String
    Dim Check As String
    Dim objCmd2 As Object
    Dim iCount As Integer
    Dim tDate As Date

    Current = LocBox.SelectedItem

    Check = LocList.FindString(Current)

    If Check > -1 Then
        MsgBox("You have already selected this place to visit")
    Else
        LocList.Items.Add(Current)
        ObjDataReader.Close()
        tDate = Date.Today
        MessageBox.Show(tDate)
        tDate = tDate.ToString()
        objCmd2 = New SqlCommand("SELECT " & Replace(Current, " ", "_") & " FROM Stats WHERE Date = '" & tDate & "'", objConn)
        ObjDataReader = objCmd2.ExecuteReader
        If ObjDataReader.HasRows Then
            ObjDataReader.Read()
            If ObjDataReader(0) Is DBNull.Value Then
                iCount = 0
            Else
                iCount = ObjDataReader(0)
            End If
        Else
            iCount = 0
        End If
        objCmd = New SqlCommand("INSERT INTO Stats(Date," & Replace(Current, " ", "_") & ") Values('" & tDate.Date & "'," & iCount & " )", objConn)
        ObjDataReader.Close()
        objCmd.ExecuteNonQuery()
        objConn.Close()

提前致谢。

我认为第二个SQL语句出现了问题。我不明白为什么在日期字段中添加日期会有问题,我已经尝试将其添加为不起作用的字符串。感谢到目前为止的所有答案。

4 个答案:

答案 0 :(得分:1)

正如马丁所指出的那样,这可能是最好的选择:

int colnum = ConvertColumnNameToNumber(Current)
objCmd2 = New SqlCommand("SELECT "+colnum.ToString()+" FROM Stats WHERE [Date] = @inDate", objConn)
objCmd2.Parameters.Add("@inDate",SqlDbType.DateTime).value = tDate

未经测试或编译可能存在拼写错误。

注意上面使用colnum。因为您不能使用列名参数,所以必须使用列号。如果你有代码返回一个整数作为返回值,你可以防止注入(它只能是一个数字)。

答案 1 :(得分:0)

我猜这个问题就在这里:MessageBox.Show(tDate)

您需要使用tDate.ToString或您想要的任何其他方法将日期转换为字符串。

您是否收到编译错误?我总是使用Option Strict On进行编码,如果你没有转换变量,你的代码肯定会出错。

答案 2 :(得分:0)

我可能不在基础但你有tDate作为Date变量类型,然后你试图发送一个字符串,你可以在你的SqlCommand行中使用tDate.ToString()而不是先转换它。

答案 3 :(得分:0)

尝试从tdate周围删除撇号,使其成为......

objCmd2 = New SqlCommand("SELECT " & Replace(Current, " ", "_") & " FROM Stats WHERE Date = " & tDate, objConn) 

objCmd = New SqlCommand("INSERT INTO Stats(Date," & Replace(Current, " ", "_") & ") Values(" & tDate.Date & "," & iCount & " )", objConn)