在日期 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 项目移动到新计算机后日期无法正常工作[关闭]