VBA调用C#连接MySQL的解决方案
核心原理
通过COM互操作技术实现VBA与C#的交互:
- C#创建COM可见组件,封装MySQL连接逻辑
- VBA通过COM接口调用C#组件方法
- MySQL连接使用ADO.NET驱动程序
实现步骤
步骤1:创建C# COM组件
using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Runtime.InteropServices;
namespace MySQLComBridge
{
[ComVisible(true)]
[Guid("D6F88E6A-8A0F-4A3D-9D3B-3C7B3C9E7A1B")] // 需替换为实际GUID
[ProgId("MySQLCom.Connector")]
public class DBConnector
{
private MySqlConnection _connection;
public bool Connect(string server, string db, string user, string pwd)
{
string connStr = $"Server={server};Database={db};Uid={user};Pwd={pwd}";
_connection = new MySqlConnection(connStr);
try {
_connection.Open();
return true;
}
catch (Exception) {
return false;
}
}
public string ExecuteQuery(string sql)
{
if (_connection?.State != ConnectionState.Open)
return "Not connected";
using (var cmd = new MySqlCommand(sql, _connection))
{
using (var reader = cmd.ExecuteReader())
{
var result = new System.Text.StringBuilder();
while (reader.Read())
{
for (int i = 0; i < reader.FieldCount; i++)
{
result.Append(reader[i].ToString() + "\t");
}
result.AppendLine();
}
return result.ToString();
}
}
}
public void Disconnect()
{
_connection?.Close();
}
}
}
步骤2:编译和注册COM组件
- 项目设置:
- 启用 COM互操作注册 (项目属性 > 生成)
- 设置 [assembly: ComVisible(true)]
- 注册DLL:
regasm /codebase MySQLComBridge.dll /tlb:MySQLComBridge.tlb
步骤3:VBA调用COM组件
Sub ConnectToMySQL()
Dim dbConn As Object
Set dbConn = CreateObject("MySQLCom.Connector")
' 连接参数
Dim server As String: server = "localhost"
Dim database As String: database = "testdb"
Dim user As String: user = "root"
Dim pwd As String: pwd = "securePassword"
' 建立连接
If dbConn.Connect(server, database, user, pwd) Then
MsgBox "Connection successful!"
' 执行查询
Dim result As String
result = dbConn.ExecuteQuery("SELECT * FROM customers")
Debug.Print result
' 断开连接
dbConn.Disconnect
Else
MsgBox "Connection failed"
End If
End Sub
关键配置说明
-
MySQL驱动依赖:
- 目标机器需安装 MySQL Connector/NET
- 或打包
MySql.Data.dll与主DLL同级目录
-
安全注意事项:
// 在C#中使用参数化查询防止SQL注入 var cmd = new MySqlCommand("SELECT * FROM users WHERE id=@id", _connection); cmd.Parameters.AddWithValue("@id", userId); -
32/64位兼容:
- Office VBA通常为32位,需使用32位
regasm - 路径:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm
- Office VBA通常为32位,需使用32位
部署流程
- 开发机:
- 编译C#项目生成DLL
- 执行
regasm注册
- 客户端机器:
- 安装.NET Framework 4.8+
- 安装MySQL Connector/NET
- 复制DLL到目标机并注册
- Office信任中心启用VBA访问
注意:首次调用需在VBA编辑器添加引用(工具 > 引用 > 浏览选择TLB文件)
此方案实现VBA与MySQL的安全高效通信,适用于Excel/Word等Office自动化场景。
4503

被折叠的 条评论
为什么被折叠?



