VB.NET如何通过ADODB连接MySQL数据库并绑定至DataGridView
VB.NET ADODB连接MySQL绑定DataGridView问题修复方案
问题根因
- 核心逻辑错误:.NET 原生
DataGridView不支持直接绑定 ADODB.Recordset 类型对象,必须先将 Recordset 转换为 ADO.NET 的DataTable才可正常显示数据 - 无效冗余操作:代码首次打开 Recordset 后立刻执行关闭,重复两次打开查询完全无意义,额外占用数据库资源
- 不规范代码:
sql2变量未提前声明就直接使用,存在隐式类型转换风险 - 缺失异常捕获:没有错误捕获逻辑,连接、查询过程中出现的错误会静默失败,同时未手动释放连接和Recordset对象,容易造成数据库连接泄漏
前置检查
- 项目已添加 ADODB 引用:右键项目 → 添加引用 → COM 选项卡 → 勾选「Microsoft ActiveX Data Objects 2.8 Library」或更高版本
- 本地已安装
MySQL ODBC 8.0 Unicode Driver驱动,连接字符串中的数据库地址、库名、账号、密码配置正确,STOCK表实际存在
修正后代码
Imports System.Data Imports ADODB Imports System.Data.OleDb ' 原有业务需要的MySql、Crystal Reports相关引用可以自行保留 Public Class Form3 Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim conn As New ADODB.Connection() Dim mrs As New ADODB.Recordset() Dim sconnect As String = "DRIVER={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=stockauto;User=root;Password=;" Dim sql2 As String = "SELECT * From STOCK" Try ' 打开数据库连接 If conn.State = ConnectionState.Open Then conn.Close() End If conn.Open(sconnect) ' 执行查询 mrs.Open(sql2, conn, CursorTypeEnum.adOpenStatic, LockTypeEnum.adLockReadOnly) ' 将ADODB.Recordset转换为DataTable Dim da As New OleDbDataAdapter() Dim dt As New DataTable() da.Fill(dt, mrs) ' 绑定到DataGridView DataGridView1.DataSource = dt Catch ex As Exception ' 可根据业务需要自定义异常处理逻辑 MsgBox("操作失败:" & ex.Message) Finally ' 手动释放资源避免连接泄漏 If mrs.State = ConnectionState.Open Then mrs.Close() End If If conn.State = ConnectionState.Open Then conn.Close() End If mrs = Nothing conn = Nothing End Try End Sub End Class
内容的提问来源于stack exchange,提问作者Sajith M U
相关产品推荐
相关产品推荐

