You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行更新代码时触发System.Data.OleDb.OleDbException异常求助

排查OleDbException异常:更新Access房间状态失败的问题

让我帮你一步步拆解这个问题,从代码里能看到几个关键的错误点,正是它们导致了这个数据库异常:

1. 字符串拼接用错了运算符

你这里的代码存在一个低级但致命的错误:

cmd.Parameters.AddWithValue("?name", Form3.NAMETextBox.Text And Form3.SURNAMETextBox.Text)

And是VB中的逻辑运算符,不是字符串拼接符!如果两个文本框内容非空,它会把文本当成布尔值True来运算,最终结果还是True——这会导致你往occupied by字段插入一个布尔值,而不是用户的姓名,直接触发数据类型不匹配的OleDbException。

正确的写法应该用&做字符串拼接,建议加个空格分开名和姓:

cmd.Parameters.AddWithValue("?name", Form3.NAMETextBox.Text & " " & Form3.SURNAMETextBox.Text)

2. OleDb参数绑定的误区:只认位置,不认名称

OleDb并不支持你写的?status这种命名占位符,它是严格按照参数添加的顺序来匹配SQL里的?。虽然你现在的参数顺序是对的(SQL里的三个?对应你添加的三个参数),但没必要给占位符加名称,直接写?就行,避免混淆。

3. 数据库资源管理不严谨

你手动调用cmd.Dispose()和myConnection.Close(),但如果ExecuteNonQuery()抛出异常,这些语句可能不会执行,导致数据库连接泄漏。推荐用Using语句自动管理资源,不管有没有异常都会正确释放:

' 重构后的连接与命令处理
Using myConnection As New OleDbConnection(connString)
    myConnection.Open()
    Dim str As String = "update [ROOMS] set [OCCUPIED]=?, [occupied by]=? Where [ROOM] = ?"
    Using cmd As New OleDbCommand(str, myConnection)
        cmd.Parameters.AddWithValue("@p1", True) ' 对应第一个?:OCCUPIED字段
        cmd.Parameters.AddWithValue("@p2", Form3.NAMETextBox.Text & " " & Form3.SURNAMETextBox.Text) ' 对应第二个?:occupied by字段
        cmd.Parameters.AddWithValue("@p3", ROOMTextBox.Text) ' 对应第三个?:ROOM字段
        Try
            cmd.ExecuteNonQuery()
            MsgBox("done")
        Catch ex As Exception
            ' 把具体异常信息显示出来,方便排查
            MsgBox($"error: {ex.Message}")
        End Try
    End Using
End Using

4. DataSet更新可能存在冲突

你手动执行SQL更新后,又调用了TableAdapterManager.UpdateAll(Me.MY_HOTELDataSet),这可能导致DataSet里的旧数据覆盖你刚更新的内容,或者出现数据不一致。如果界面绑定了ROOMSBindingSource,可以在手动更新后刷新DataSet:

Me.ROOMSTableAdapter.Fill(Me.MY_HOTELDataSet.ROOMS)

或者干脆统一用TableAdapter来执行更新,避免混合两种更新方式。

额外建议:先看具体异常信息

把Catch块里的MsgBox("error")改成显示具体异常内容,这样能直接看到数据库返回的错误提示(比如“数据类型不匹配”“字段不存在”),更快定位问题。

内容的提问来源于stack exchange,提问作者MCHATS55

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:09:25