Sql 在两个DateTimePicker值之间选择
我有点为难,希望有人能帮助我 我正在尝试执行SQL SELECT命令以显示一组日期设置在DateTimePicker1和DateTimePicker2之间的值,这是我的代码:Sql 在两个DateTimePicker值之间选择,sql,vb.net,Sql,Vb.net,我有点为难,希望有人能帮助我 我正在尝试执行SQL SELECT命令以显示一组日期设置在DateTimePicker1和DateTimePicker2之间的值,这是我的代码: If ComboBox1.Text = "All" Then da = New OleDbDataAdapter("SELECT * FROM Times WHERE ([Date] BETWEEN '" & DateTimePicker1.Value & "' AND '"
If ComboBox1.Text = "All" Then
da = New OleDbDataAdapter("SELECT * FROM Times WHERE ([Date] BETWEEN '" & DateTimePicker1.Value & "' AND '" & DateTimePicker2.Value & "')", MyConn)
da.Fill(ds, "Times")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
Exit Sub
End If
这段代码可以正常工作。。。。它从Access数据库中提取信息(我仅限于使用Access…),并在DataGrid中进行支付
我遇到的问题是,它正在从范围之间的dd中选择所有内容,即:
DateTimePicker1等于2015年8月3日
DateTimePicker2等于2015年8月5日
正在回调的数据是:
03/06/2015
04/06/2015
05/06/2015
03/07/2015
04/07/2015
05/07/2015
03/08/2015
04/08/2015
05/08/2015
似乎只使用dd值,而不是整个日期值
我认为这只是一个语法错误,但我真的很难弄清楚在哪里
谢谢
我现在已将代码更改为:
If ComboBox1.Text = "All" Then
Dim sql = "SELECT * FROM Times WHERE [Date] BETWEEN @StartDate AND @EndDate"
Dim cmd = New OleDbCommand(sql, MyConn)
cmd.Parameters.AddWithValue("@StartDate", DateTimePicker1.Value)
cmd.Parameters.AddWithValue("@EndpDate", DateTimePicker2.Value)
Dim da = New OleDbDataAdapter(cmd)
da.Fill(ds, "Times")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
Exit Sub
End If
这根本不显示任何数据。。。它不会抛出任何错误,它会将标题拖过,但不会显示任何数据。。有什么建议吗
感谢始终使用sql参数(即防止sql注入),这可能也会解决此问题:
Dim sql = "SELECT * FROM Times WHERE [Date] BETWEEN @StartDate AND @EndDate"
Dim cmd = New OleDbCommand(sql, MyConn)
cmd.Parameters.AddWithValue("@StartDate", DateTimePicker1.Value);
cmd.Parameters.AddWithValue("@EndpDate", DateTimePicker2.Value);
Dim da = New OleDbDataAdapter(cmd)
也许您还想截断日期时间的时间部分:
cmd.Parameters.AddWithValue("@StartDate", DateTimePicker1.Value.Date);
cmd.Parameters.AddWithValue("@EndpDate", DateTimePicker2.Value.Date);
Bu因为DateTimePicker2.Value.Date
截断了您从午夜开始选择的时间,而不是当天晚些时候。然后需要通过添加一天来包含结束日期,因此DateTimePicker2.Value.date.AddDays(1)
。但这也将包括第二天的数据,如果那是午夜的话。因此,如果您尝试使用<&>运算符,最好使用=
和而不是在
之间使用:
da = New OleDbDataAdapter("SELECT * FROM Times WHERE ([Date] >= 'DateTimePicker1.Value' && [Date] <= 'DateTimePicker2.Value')", MyConn)
da=New-OleDbDataAdapter(“从时间中选择*,其中([Date]>='DateTimePicker1.Value'&&&[Date]如果您将DTP值作为SQL参数传递,那么问题很可能会消失。@AndrewMorton从安全角度来看,这也是一个很好的做法,因为它可以避免SQL注入。似乎在da.SelectCommand=cmd
行上遇到了一个问题,它告诉我“对象引用未设置为对象的实例”。"我的da被定义为Dim da as oledbataadapter
-抱歉,我对VB真的很陌生!@WillRyan:修复了错误地使用SqlCommand
而不是OleDbCommand
。我还使用了oledbataadapter
的构造函数来初始化数据适配器。谢谢你的帮助!我刚刚更新了这个问题,因为它不是t现在显示任何数据…@WillRyan:出于好奇,此代码位于If ComboBox1.Text=“All”中
这意味着您希望显示所有数据。为什么在此处应用Where
过滤器?鉴于您无法获得预期结果的问题,没有样本数据很难提供帮助。我甚至不知道2015年8月3日
是什么,8月3日还是3月8日?这是基于用户的详细信息,我想显示所有用户的所有日志我注意到DTP输出的是MM/dd/yy,所以我将格式更改为dd/MM/yyyy,我仍然得到相同的问题,它只显示基于dd部分的数据
da = New OleDbDataAdapter("SELECT * FROM Times WHERE ([Date] >= 'DateTimePicker1.Value' && [Date] <= 'DateTimePicker2.Value')", MyConn)