使用代码更新时获取"A first chance exception of type 'System.Data.OleDb.OleDbException' occurred in System.D



我的OCCUPIEDBoolean,我希望更改房间状态,以便它不会出现在免费房间列表中。

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 = "C:UsersMAI KUDADocumentsVisual Studio 2008ProjectsHOTEL MANAGMENTHOTEL MANAGMENTbinDebugMY HOTEL.accdb"
    connString = provider & dataFile
    myConnection.ConnectionString = connString
    myConnection.Open()
    Dim str As String
    str = "update [ROOMS] set [OCCUPIED]=?status, [occupied by]=?name Where [ROOM] = ?room  "
    Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
    cmd.Parameters.AddWithValue("?status", True)
    cmd.Parameters.AddWithValue("?name", Form3.NAMETextBox.Text And Form3.SURNAMETextBox.Text)
    cmd.Parameters.AddWithValue("?room", ROOMTextBox.Text)
    Try
        cmd.ExecuteNonQuery()
        cmd.Dispose()
        myConnection.Close()
        MsgBox("done")
    Catch ex As Exception
        MsgBox("error")
    End Try
    Form3.ROOMTextBox.Text = ROOMTextBox.Text
    Me.Validate()
    Me.ROOMSBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.MY_HOTELDataSet)
    Me.Hide()
    Form3.Show()
End Sub

有几件事。

  1. 用于 ms 访问的 Ado.NET OleDB 提供程序使用 ? 作为参数占位符。它们没有命名,因此请完全删除名称,仅使用问号。确保参数的顺序与它们在语句中显示的顺序匹配。
  2. 在 vb 中连接字符串时,请使用 & 而不是用于组合布尔值的单词 AND。我在名称部分之间添加了一个空格,如果这不是您的意图,请将其删除。
  3. 不适用于该错误,但我强烈建议使用块来确保您的连接已关闭/处置。

更新了相关代码:

str = "update [ROOMS] set [OCCUPIED] = ?, [occupied by]= ? Where [ROOM] = ?"
Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
' here the name no longer matters so keep it or drop it up to you as long as the order matches the order in the statement.
cmd.Parameters.AddWithValue("?status", True)
cmd.Parameters.AddWithValue("?name", Form3.NAMETextBox.Text  & " " & Form3.SURNAMETextBox.Text)
cmd.Parameters.AddWithValue("?room", ROOMTextBox.Text)

相关内容

最新更新