You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net应用无法连接MariaDB数据库(同凭据Python可用)

解决思路

1. 检查数据库用户的主机授权范围

MariaDB的用户权限与访问主机绑定,即便用户名密码正确,若Windows 11的IP不在该用户的授权列表内,就会触发Access denied:

  • 登录群晖MariaDB(通过phpMyAdmin或SSH命令行),执行SQL查看用户授权主机:
    SELECT user, host FROM mysql.user WHERE user = '<你的用户名>';
    
  • 若结果中host仅为树莓派IP而非%(允许所有主机)或Windows 11的IP,需添加对应授权:
    -- 授权Win11单独IP访问data库
    GRANT ALL PRIVILEGES ON data.* TO '<你的用户名>'@'Win11_IP地址' IDENTIFIED BY '<你的密码>';
    FLUSH PRIVILEGES;
    
    或直接授权局域网所有主机(适合内网环境):
    GRANT ALL PRIVILEGES ON data.* TO '<你的用户名>'@'%' IDENTIFIED BY '<你的密码>';
    FLUSH PRIVILEGES;
    

2. 替换为MariaDB官方.NET连接器

你当前使用的MySql.Data.MySqlClient是Oracle维护的MySQL驱动,与MariaDB存在兼容性风险,建议改用官方驱动:

  • 在NuGet包管理器中安装MariaDBConnector
  • 修改代码命名空间:将Imports MySql.Data.MySqlClient替换为Imports MariaDBConnector
  • 连接字符串写法保持不变,兼容性会显著提升

3. 用连接字符串构建器避免拼接错误

若用户名/密码包含特殊字符(如&、=、@),直接拼接字符串会导致解析失败,进而触发权限类错误。改用构建器生成连接字符串:

Dim connBuilder As New MySqlConnectionStringBuilder()
connBuilder.Server = server
connBuilder.UserID = username
connBuilder.Password = password
connBuilder.Database = database
connBuilder.Port = 3306 ' 与Python代码保持一致,显式指定端口

sqlConn.ConnectionString = connBuilder.ConnectionString

4. 显式指定端口并检查防火墙

  • 你的Python代码明确指定了port=3306,VB代码建议显式添加该参数,避免端口配置不一致
  • 检查Windows 11防火墙是否允许VB应用出站访问3306端口
  • 检查群晖NAS防火墙规则,确认未阻止Windows 11的IP访问3306端口

5. 排查SSL配置问题

部分MariaDB版本默认要求SSL连接,Python连接器会自动适配,而MySql.Data默认关闭SSL。可在连接字符串中添加SSL参数测试:

sqlConn.ConnectionString = "server=" + server + ";user id=" + username + ";password=" + password + ";database=" + database + ";port=3306;SslMode=Preferred"

若仍失败,可临时关闭SSL排查问题(仅用于测试,不建议长期关闭):

sqlConn.ConnectionString = "server=" + server + ";user id=" + username + ";password=" + password + ";database=" + database + ";port=3306;SslMode=None"

内容的提问来源于stack exchange,提问作者user1921922

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:25:55