在listview中获取日期范围的问题

时间:2013-12-29 05:15:09

标签: sql-server vb.net datetime datetimepicker

这是代码:

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数据类型会导致日期时间值超出范围。但是当我尝试删除查询中的单引号时,它没有错误,但获取日期范围的结果不会在列表视图中查看。

2 个答案:

答案 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.Valuedate2.Value放在MessageBox中以查看他们持有的内容可能会有所帮助。