在日期 VB.NET 和 Access 数据库之间过滤

Posted

技术标签:

【中文标题】在日期 VB.NET 和 Access 数据库之间过滤【英文标题】:Filter between dates VB.NET and Access database 【发布时间】:2019-10-21 15:21:17 【问题描述】:

正如标题所说,我无法使用 vb.net 从 access 数据库中过滤 SQL 语句

Dim data1 As String = DateTimePicker1.Value.ToShortDateString
Dim data2 As String = DateTimePicker2.Value.ToShortDateString
Dim sql As String = "SELECT totais.* From totais Where totais.data Between #" + data1 + "# And #" + data2 + "#;"

它给了我随机值。如果我输入 1-10(October)-2019 它会给我系统中的所有记录,如果我输入 12-10(October)-2019 它只给出今天的记录(不显示昨天和之前的记录)。没找到问题,能帮忙吗?

谢谢

【问题讨论】:

如果您包含您尝试查询的数据样本,这可能会有所帮助。 Gent Mecaj 在下面的 awnser 中解决了它,感谢您的帮助:) 【参考方案1】:

我将使用参数而不是连接 Sql 语句的字符串。它使语句更易于阅读并避免语法错误。

对于 OleDb,参数在 sql 语句中出现的顺序必须与它们添加到参数集合中的顺序相匹配,因为 OleDb 不注意参数的名称。

Private Sub OPCode()
    Dim sql As String = "SELECT * From totais Where data Between @StartDate And @EndDate;"
    Using dt As New DataTable
        Using cn As New OleDbConnection("Your connection string"),
            cmd As New OleDbCommand(sql, cn)
            cmd.Parameters.Add("@StartDate", OleDbType.Date).Value = DateTimePicker1.Value
            cmd.Parameters.Add("@EndDate", OleDbType.Date).Value = DateTimePicker2.Value
            cn.Open()
            dt.Load(cmd.ExecuteReader)
        End Using
        DataGridView1.DataSource = dt
    End Using
End Sub

【讨论】:

我会开始使用它,老实说看起来很简单,谢谢【参考方案2】:

你需要像这样在 SQL 中使用单引号和转换类型:

SELECT totais.* FROM totais WHERE totais.data Between CDATE('" + data1 + "') And CDATE('" + data2 + "');"

【讨论】:

解决了这个问题,你真是个天才,谢谢你,我的朋友,我整天都在忙这个:) @JoséLopes 在 Stack Overflow 上感谢某人的最佳方式是接受他们的回答。您可以通过单击答案左侧的复选标记(勾号)来执行此操作。数字上方的向上三角形是一个赞成票,这也是受欢迎的,但单击复选标记是 Gent 的更多积分。你可以两者都做。此外,您接受答案可获得 2 分。 这不是解决方案,因为日期字符串的格式将被本地化,因此可能会在 SQL 中失败。要么应用固定的 ISO 格式,要么 - 最好 - 使用 Mary 所示的参数。【参考方案3】:

您应该按照 Mary 的回答使用参数,但为了完整性...

Ms/Access 需要指定为 #mm/dd/yy# 的日期,因此您的 SQL 仅在本地日期时间格式为 mm/dd/yy 的情况下才能正常工作。即主要是美国。否则你将不得不格式化你的日期字符串。

【讨论】:

以上是关于在日期 VB.NET 和 Access 数据库之间过滤的主要内容,如果未能解决你的问题,请参考以下文章

vb.net 2010日期格式和系统日期格式不一致,求解

如何在 vb.net 中获取两个日期之间的记录?

将 VB.NET 项目移动到新计算机后日期无法正常工作[关闭]

月历 vb.net 多个日期选择

在数据库中获取日期时出错(BETWEEN 子句| VB.NET|OLE)

ExecuteNonQuery 命令中缺少参数,在 VB.NET 和 Access 中使用