一、准备工作:明确对象与连接方式
VB 数据库编程的主流方式是 ADO(ActiveX Data Objects)。它通过 Connection 建立连接、Command 执行语句、Recordset 读取结果。实例以 Access(.mdb/.accdb)与 SQL Server 为主,二者差别主要在连接字符串。
Access 示例:
Dim conn As New ADODB.Connection
conn.ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;” & _
“Data Source=” & App.Path & “\data.accdb”
conn.Open
SQL Server 示例则改用 Provider=SQLOLEDB 并给出服务器、数据库与身份验证信息。连接字符串建议写入配置文件或窗体常量,避免散落在代码中。
二、用 Recordset 读取数据
Dim rs As New ADODB.Recordset
rs.Open “SELECT id, name FROM users”, conn, adOpenStatic, adLockReadOnly
Do While Not rs.EOF
Debug.Print rs!id & ” – ” & rs!name
rs.MoveNext
Loop
rs.Close
关键点是游标类型与锁定方式:只读列表用 adOpenStatic + adLockReadOnly,避免不必要的锁开销。字段取值可用 rs!字段名 或 rs.Fields("字段名").Value。
三、参数化实现增删改
拼接 SQL 字符串容易引发注入与引号转义问题,应优先使用 Command 参数。
Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = conn
cmd.CommandText = “INSERT INTO users(name, age) VALUES(?, ?)”
cmd.Parameters.Append cmd.CreateParameter(“n”, adVarWChar, adParamInput, 50, txtName.Text)
cmd.Parameters.Append cmd.CreateParameter(“a”, adInteger, adParamInput, , Val(txtAge.Text))
cmd.Execute
删除与更新同理,只需替换 CommandText 并把主键作为参数传入。Access 使用 ? 占位符并按顺序绑定;SQL Server 也可用 @name 命名参数。
四、事务与错误处理
涉及多表写入时用事务保证一致性:
On Error GoTo ErrHandler
conn.BeginTrans
‘ 多条 Execute
conn.CommitTrans
Exit Sub
ErrHandler:
conn.RollbackTrans
MsgBox “操作失败:” & Err.Description
注意:连接需保持打开状态,事务才有意义;Recordset 用完及时 Close,连接在窗体卸载时释放。
五、常见问题与优化建议
- 未找到提供程序:检查 ACE 引擎是否安装,32/64 位需与 Office 一致。
- 字段为空报错:读取前用
IsNull(rs!字段)判断。 - 界面卡顿:大数据量分页查询,避免一次性加载全部记录。
- 资源泄漏:统一在
Form_Unload中关闭 Recordset 与 Connection。
掌握以上几段代码,即可完成 VB 数据库编程中最常见的连接、查询与增删改操作,再按业务逐步封装成数据访问类,维护成本会明显下降。