我正在使用Access作为后备数据存储(我知道为什么不使用MySQL?)。无论如何,克服这个问题,我想用SQL在我的数据库中搜索预订日期。我可以让它查看今天的日期,但我想要一些输入日期然后根据此查找结果的方法。到目前为止我的代码是:
Public Class Bookings
Dim con As New OleDb.OleDbConnection
Dim dbProvider As String
Dim dbSource As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim sql As String
Private Sub Bookings_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
dbProvider = "PROVIDER=Microsoft.Jet.OleDB.4.0;"
dbSource = "Data Source = C:\Users\wm\Desktop\MAdams\Karting2000DB.mdb"
con.ConnectionString = dbProvider & dbSource
con.Open()
sql = "SELECT * FROM tblBookings WHERE BookingDate = txtDate.Text"
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "AddressBook")
MsgBox("Database is now open")
con.Close()
MsgBox("Database is now closed")
txtBookingNumber.Text = ds.Tables("AddressBook").Rows(0).Item("ID")
txtCustID.Text = ds.Tables("AddressBook").Rows(0).Item("CustomerID")
End Sub
End Class
我对此更新,这样越简单越好!
非常感谢
答案 0 :(得分:2)
您无法将txtDate
文本框的text属性嵌入到sql字符串中,并希望将其转换为正确的值。
您需要使用参数化查询
sql = "SELECT * FROM tblBookings WHERE BookingDate = @date"
da = New OleDb.OleDbDataAdapter(sql, con)
da.SelectCommand.Parameters.Add("@date", OleDbType.Date).Value = Convert.ToDateTime(txtDate.Text)
da.Fill(ds, "AddressBook")
此方法要求您的用户在文本框中键入有效日期。如果您不确定日期是否正确,那么您需要使用TryParse方法从文本中提取有效的日期时间对象
Dim bookDate as DateTime
if Not DateTime.TryParse(txtDate.Text, bookDate) then
MessageBox.Show("Not a valid date")
else
..... the code above with the bookDate passed as parameter value.
正如@Plutonix在评论中所说,有很多最佳实践需要应用于您的代码