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