在日期 VB.NET 和 Access 数据库之间过滤
Filter between dates VB.NET and Access database
正如标题所说,我无法使用 vb.net
从访问数据库中过滤 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,它只会给出今天的记录(不显示昨天和之前的记录)。我没有找到问题,你能帮忙吗?
谢谢
您需要在 SQL 中使用单引号并转换类型,如下所示:
SELECT totais.* FROM totais WHERE totais.data Between CDATE('" + data1 + "') And CDATE('" + data2 + "');"
我会使用参数而不是为 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
您应该按照 Mary 的回答使用参数,但为了完整性...
Ms/Access 需要指定为#mm/dd/yy# 的日期,因此您的 SQL 只能在本地日期时间格式为 mm/dd/yy 的情况下正常工作。即主要是美国。否则你将不得不格式化你的日期字符串。
正如标题所说,我无法使用 vb.net
从访问数据库中过滤 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,它只会给出今天的记录(不显示昨天和之前的记录)。我没有找到问题,你能帮忙吗?
谢谢
您需要在 SQL 中使用单引号并转换类型,如下所示:
SELECT totais.* FROM totais WHERE totais.data Between CDATE('" + data1 + "') And CDATE('" + data2 + "');"
我会使用参数而不是为 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
您应该按照 Mary 的回答使用参数,但为了完整性...
Ms/Access 需要指定为#mm/dd/yy# 的日期,因此您的 SQL 只能在本地日期时间格式为 mm/dd/yy 的情况下正常工作。即主要是美国。否则你将不得不格式化你的日期字符串。