sql-server - 在 ListView 中获取日期范围的问题

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

相关文章:

sql-server - SQL Server - 批量插入而不丢失 CR 或 LF 字符

sql - 我应该在插入之前检查键是否存在或在插入时处理异常吗?

javascript - 当前时间在 hh :mm:ss tt formate in javascript

c# - MVC4 发布的应用程序帐户登录页面未加载

c# - ServiceStack.OrmLite 中的 ntext

asp.net - Visual Studio 2015 RC 中的界面上出现错误 "Visual Basic 9.0 does not support auto-implemented properties"

.net - Visual Basic 的 .Net 4.5 有哪些新功能?

asp.net - 构建任务意外失败

Javascript 日期 01/01/0001

python - 计算天数,但从给定的时间开始