数据类型在比较数据库中的两个日期时不匹配条件

时间:2017-11-06 08:33:24

标签: vb.net

在下面比较两个日期和获取数据。但是从表格中我正确地得到两个日期并且它显示错误数据类型不匹配任何一个请帮我解决这个问题。

Form.vb:

 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        provider = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source="
        dataFile = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
        connString = provider & dataFile
        myConnection.ConnectionString = connString
        myConnection.Open()
        Dim dt As New DataTable
        Dim ds As New DataSet
        ds.Tables.Add(dt)
        Dim da As New OleDbDataAdapter
        da = New OleDbDataAdapter("Select * from Add_Student Where Fee_Date between '" + DateTimePicker1.Value.ToString() + "' and '" + DateTimePicker2.Value.ToString() + "'", myConnection)
        da.Fill(dt)
        Add_StudentDataGridView.DataSource = dt.DefaultView
        myConnection.Close()
    End Sub

1 个答案:

答案 0 :(得分:1)

如果您正在使用Access,那么格式化日期文字的正确方法与它在VB中完成的方式相同,即

da = New OleDbDataAdapter("Select * from Add_Student Where Fee_Date between #" + DateTimePicker1.Value.ToString("d/MM/yyyy h:mm:ss tt") + "# and #" + DateTimePicker2.Value.ToString("d/MM/yyyy h:mm:ss tt") + "#", myConnection)

如果您只想比较日期,则应删除时间部分。

在这样的表达式中使用&运算符很难阅读。相反,您应该使用String.Format

da = New OleDbDataAdapter(String.Format("Select * from Add_Student Where Fee_Date between #{0:d/MM/yyyy h:mm:ss tt}# and #{1:d/MM/yyyy h:mm:ss tt}#",
                                        DateTimePicker1.Value,
                                        DateTimePicker2.Value),
                          myConnection)

或者,在VB的最新版本中,字符串插值:

da = New OleDbDataAdapter($"Select * from Add_Student Where Fee_Date between #{DateTimePicker1.Value:d/MM/yyyy h:mm:ss tt}# and #{1:d/MM/yyyy h:mm:ss tt}#",
                          myConnection)

当然,最好的选择是不使用任何类型的字符串连接,而是使用参数:

da = New OleDbDataAdapter($"Select * from Add_Student Where Fee_Date between @StartDate and @EndDate",
                          myConnection)

With da.SelectCommand.Parameters
    .AddWithValue("@StartDate", DateTimePicker1.Value)
    .AddWithValue("@EndDate", DateTimePicker2.Value)
End With

Click here有关使用ADO.NET参数的更多信息。

注意:我认为Access支持" h:mm:ss tt"时间,但如果没有,请尝试" HH:mm:ss"。