错误是:从字符串转换日期和/或时间时转换失败。
基本上我正在尝试这样做,以便当有人点击列表框中的某个位置时,它会将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语句出现了问题。我不明白为什么在日期字段中添加日期会有问题,我已经尝试将其添加为不起作用的字符串。感谢到目前为止的所有答案。
答案 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)