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



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

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

如果您使用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

单击此处获取有关使用ADO.NET参数的详细信息。

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

最新更新