VBA调用C#连接MySQL的解决方案

VBA调用C#连接MySQL的解决方案

核心原理

通过COM互操作技术实现VBA与C#的交互:

  1. C#创建COM可见组件,封装MySQL连接逻辑
  2. VBA通过COM接口调用C#组件方法
  3. 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组件
  1. 项目设置:
    • 启用 COM互操作注册 (项目属性 > 生成)
    • 设置 [assembly: ComVisible(true)]
  2. 注册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

关键配置说明

  1. MySQL驱动依赖

  2. 安全注意事项

    // 在C#中使用参数化查询防止SQL注入
    var cmd = new MySqlCommand("SELECT * FROM users WHERE id=@id", _connection);
    cmd.Parameters.AddWithValue("@id", userId);
    
  3. 32/64位兼容

    • Office VBA通常为32位,需使用32位regasm
    • 路径:C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm

部署流程

  1. 开发机:
    • 编译C#项目生成DLL
    • 执行regasm注册
  2. 客户端机器:
    • 安装.NET Framework 4.8+
    • 安装MySQL Connector/NET
    • 复制DLL到目标机并注册
    • Office信任中心启用VBA访问

注意:首次调用需在VBA编辑器添加引用(工具 > 引用 > 浏览选择TLB文件)

此方案实现VBA与MySQL的安全高效通信,适用于Excel/Word等Office自动化场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值