Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在两个DateTimePicker值之间选择_Sql_Vb.net - Fatal编程技术网

Sql 在两个DateTimePicker值之间选择

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 '"

我有点为难,希望有人能帮助我

我正在尝试执行SQL SELECT命令以显示一组日期设置在DateTimePicker1和DateTimePicker2之间的值,这是我的代码:

        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)