这是代码:
Private Sub btnSearchMaintDate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearchMaintDate.Click
con.Open()
ListView1.Items.Clear()
cmd = New SqlCommand("SELECT * FROM tblMaintenanceRpt WHERE dates BETWEEN '" & date1.Value & "' AND '" & date2.Value & "'", con)
cmd.CommandType = CommandType.Text
Dim dr As SqlDataReader
dr = cmd.ExecuteReader
While dr.Read
Dim lv As New ListViewItem
With lv
.Text = dr(1).ToString
.SubItems.Add(dr(2).ToString)
.SubItems.Add(dr(3).ToString)
.SubItems.Add(dr(4).ToString)
End With
ListView1.Items.Add(lv)
End While
dr.Close()
con.Close()
End Sub
我在While dr.read中遇到错误,它说SqlException未处理。将char数据类型转换为datetime数据类型会导致日期时间值超出范围。但是当我尝试删除查询中的单引号时,它没有错误,但获取日期范围的结果不会在列表视图中查看。
答案 0 :(得分:2)
尝试使用参数而不是在字符串查询中附加日期:
cmd = New SqlCommand("SELECT * FROM tblMaintenanceRpt WHERE dates BETWEEN @date1 AND @date2", con)
cmd.Parameters.AddWithValue("@date1", date1.Value)
cmd.Parameters.AddWithValue("@date2", date2.Value)
使用参数还可以使您的应用程序不易受SQL注入攻击。
答案 1 :(得分:0)
如果您想忽略日期时间值的时间部分,可以使用> =和<而不是BETWEEN(也许时间值是你没有看到任何结果的原因)。将date1.Value
和date2.Value
放在MessageBox
中以查看他们持有的内容可能会有所帮助。