Visual Basic错误BC30456:ExecuteNonQuery不是OleDbCommand成员,求助修复
修复VB错误BC30456:'ExecuteNonQuery' 不是 'OleDbCommand' 的成员
错误BC30456的核心原因是编译器无法识别cm变量为OleDbCommand类型,导致找不到ExecuteNonQuery方法。以下是具体修复方案:
1. 明确声明cn和cm变量类型
你的代码中未显式声明数据库连接cn和命令对象cm的类型,编译器可能将其推断为Object类型,进而无法识别OleDbCommand的成员方法。
在类级别添加变量声明:
Imports System.Data.OleDb Public Class frmProgram ' 显式声明数据库连接和命令对象类型 Private cn As OleDbConnection Private cm As OleDbCommand ' 其余代码... End Class
或者在btnsave_Click方法内直接声明cm:
Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click Try If MsgBox("SAVE RECORD?", vbYesNo + vbQuestion) = vbYes Then ' 初始化数据库连接(替换为你的实际连接字符串) cn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=你的数据库路径.accdb;") cn.Open() ' 直接声明cm为OleDbCommand类型 Dim cm As New OleDbCommand("insert into tblProgram(Sec_code, description, course) values(@Sec_code, @description, @course)", cn) With cm .Parameters.AddWithValue("@Sec_code", txtsec_code.Text) .Parameters.AddWithValue("@description", txtdescription.Text) .Parameters.AddWithValue("@course", cbocourse.Text) .ExecuteNonQuery() End With cn.Close() MsgBox("RECORD HAS BEEN SUCCESSFULLY SAVED", vbInformation) End If Catch ex As Exception ' 确保异常时连接也能关闭 If cn IsNot Nothing AndAlso cn.State = ConnectionState.Open Then cn.Close() End If MsgBox(ex.Message, vbCritical) End Try End Sub
2. 避免命名空间冲突
如果项目中存在自定义的OleDbCommand类,会导致编译器混淆。此时可以通过全限定名指定类型:
cm = New System.Data.OleDb.OleDbCommand("insert into tblProgram(Sec_code, description, course) values(@Sec_code, @description, @course)", cn)
3. 修正逻辑漏洞
原代码中无论用户在确认对话框选择"Yes"还是"No",都会执行插入操作。需将数据库操作代码移到If判断块内部,确保只有用户确认后才执行保存。
优化建议
使用Using语句可自动释放资源,避免手动关闭连接的遗漏:
Private Sub btnsave_Click(sender As Object, e As EventArgs) Handles btnsave.Click If MsgBox("SAVE RECORD?", vbYesNo + vbQuestion) <> vbYes Then Exit Sub Try Using cn As New OleDbConnection("你的连接字符串") cn.Open() Using cm As New OleDbCommand("insert into tblProgram(Sec_code, description, course) values(@Sec_code, @description, @course)", cn) With cm .Parameters.AddWithValue("@Sec_code", txtsec_code.Text) .Parameters.AddWithValue("@description", txtdescription.Text) .Parameters.AddWithValue("@course", cbocourse.Text) .ExecuteNonQuery() End With End Using End Using MsgBox("RECORD HAS BEEN SUCCESSFULLY SAVED", vbInformation) Catch ex As Exception MsgBox(ex.Message, vbCritical) End Try End Sub
内容的提问来源于stack exchange,提问作者Jimmy Mirabuna
相关产品推荐
相关产品推荐

