在VB.Net中使用SQL连接到Access数据库

时间:2015-03-04 14:08:49

标签: sql vb.net ms-access

我正在使用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

我对此更新,这样越简单越好!

非常感谢

1 个答案:

答案 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在评论中所说,有很多最佳实践需要应用于您的代码

  • 不要为连接,适配器和实现全局变量 其他托管类。它们需要在使用后立即进行 当你再次需要它们时重建
  • 对象,如连接,适配器以及最终的DataReader 实现一次性界面。这意味着你应该 将它们包含在Using语句中,以便在不使用时销毁它们 需要他们了
  • 不要在方法中对连接字符串进行硬编码。如果你想 分发您需要的应​​用程序,以便随处更改该字符串 (除非您的目标pc具有相同的路径)使用app.Config (web.Config)和要检索它的ConfigurationManager类