这是代码:
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 数据类型导致日期时间值超出范围。但是,当我尝试删除查询中的单引号时,它没有错误,但获取日期范围的结果在 ListView 中看不到。
最佳答案
尝试使用参数而不是在字符串查询中附加日期:
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 注入(inject)的攻击。</p>
关于sql-server - 在 ListView 中获取日期范围的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20822384/