简介:这份免安装的 MySQL Connector/Net 6.8.3 压缩包,面向使用 C#、VB.NET 等语言并需要连接 MySQL 的 .NET 开发者,可在无安装程序环境下直接解压部署,解决不同环境中快速集成数据库驱动的需求。压缩包共 21 个文件,大小仅 3.45MB,包含针对 .NET 2.0/4.0/4.5 及运行时组件的 DLL,以及 CHM 帮助文档、HTML 许可说明、版本变更记录等,结构清晰,便于按目标框架选用。目前已有 280 人学习下载,是轻量实用的官方驱动选择。除核心 MySql.Data.dll 外,还提供 Entity Framework 5/6 的映射程序集,方便在 EF 项目中直接引用;自带的 Release Notes 与 CHANGES 可帮助评估升级影响,Documentation 则便于快速查询 API 用法。这套资源适合需要在离线或受限环境下快速搭建 MySQL 数据访问层的 .NET 开发者。
1. 装这个免安装版连接器之前:6.8.3 的定位与适用场景
mysql connector net 6.8.3 noinstall 这个组合,是我在收拾一台老服务器的 .NET 项目环境时捡回来的。项目跑在 .NET Framework 4.5 上,数据库是 MySQL 5.6,最初想当然装了最新版 MySQL Connector/NET,结果一跑就报认证方式不兼容,换回 6.8.3 的免安装 zip 反而一路通畅。这类老连接器的典型问题在于:新版不一定向下兼容老服务端,而 noinstall 版又不会往 GAC、注册表里留一堆你不知道的痕迹。
装不好会怎样:要么引用阶段就编译不过,要么运行时抛 Could not load file or assembly,要么 SQL 写得没问题却连不上库,最后查一圈发现是驱动和服务端版本互相不认识。适合看这篇的人,是手头有老项目要用 MySQL Connector/NET 6.8.3、需要在离线或受控环境里手动部署 DLL 的开发者。下面这套流程,我会从版本核对开始,一直讲到装完怎么验证跑通。
2. 部署前的环境核对:版本矩阵与安装包选择
2.1 先看运行时:.NET Framework 4.0/4.5 与 Client Profile 的坑
6.8.3 是 .NET Framework 时代的产品,官方程序集面向 .NET Framework 4.0 和 4.5 两个运行时。项目目标框架是 4.0、4.5、4.6 都行,只要不低于 4.0 就能引用;但如果项目跑在 .NET Core 或 .NET 5 以上的现代运行时上,这个版本直接不能用。我见过有人把老连接器 DLL 硬拖进新项目,编译能过,一运行就崩,最后查半天才发现运行时根本不匹配。
在 Visual Studio 里确认目标框架的位置是:项目属性 → 应用程序 → 目标框架。老项目这里经常挂着 .NET Framework 4 Client Profile,这个裁剪版去掉了一部分程序集,引用完整版驱动时容易在编译期报程序集冲突。我的经验是:只要项目允许,直接把目标框架改成 .NET Framework 4 或 4.5 完整版,比在 Client Profile 里反复纠结省事得多。
| 运行环境 | 能否使用 6.8.3 | 说明 |
|---|---|---|
| .NET Framework 4.0 / 4.5 / 4.6+ | 能 | 引用 net40 或 net45 分层里的 MySql.Data.dll |
| .NET Framework 4 Client Profile | 勉强,不推荐 | 建议改成完整版再引用 |
| .NET Core / .NET 5+ | 不能 | 请用 MySQL Connector/NET 8.x 或 MySqlConnector |
如果项目已经迁到了 .NET 6 或 .NET 8,就不要回头看 6.8.3 了。这个版本的程序集不认现代运行时的加载模型,硬塞进去只会把排错时间浪费在莫名其妙的 FileLoadException 上。老连接器配老运行时,新驱动配新运行时,这是我在版本选择上最坚持的一条原则。
2.2 6.8.3 适配哪一档 MySQL 服务端
6.8.3 出生的年代对应 MySQL 5.5、5.6、5.7,它和 5.6、5.7 的配合是最完整的。如果你手里的服务端是 MySQL 5.6 或 5.7,用这个版本没有障碍;连 5.5 也能跑,只是新特性支持不完整。真正的问题出在 MySQL 8.0 上:8.0 默认的认证插件是 caching_sha2_password,而 6.8.3 的握手协议不认识它,连接在 Open 阶段就会失败,报错信息像 “Authentication method ‘caching_sha2_password’ not supported”。
这个版本错配是我在排障里见过最多的远程问题。很多开发者手里库是 5.7,下载驱动时没看版本,顺手拿了最新 8.x 装上,也能连;可一旦换到 5.6 的旧库,新驱动默认启用的 SSL 行为和缓存认证参数又可能出幺蛾子。反过来,库已经升到 8.0 却还用 6.8.3,同样会卡在握手。所以选版本前先做两件事:查 MySQL 服务端版本,执行 SELECT VERSION(); 查项目目标框架,看项目属性。两个结果都确认了再决定装哪个连接器。
| 环境组合 | 6.8.3 表现 | 我的建议 |
|---|---|---|
| MySQL 5.5 + .NET 4.0 | 基本可用 | 可以,但别指望新特性 |
| MySQL 5.6 / 5.7 + .NET 4.0 / 4.5 | 稳定 | 这个版本的主要使用场景 |
| MySQL 8.0 + .NET 4.5 | 认证失败 | 换 Connector/NET 8.x |
| MySQL 8.0 + .NET Core | 无法加载 | 用新版驱动 |
另外提醒一句,MySQL 8.0 对 utf8mb4 默认排序规则做过调整,老驱动即使绕过认证问题,也可能在字符集协商上报 Unknown collation。服务端和驱动尽量保持同代,这句话省下来的排障时间远超你更新一次驱动的时间。
2.3 noinstall 版和 installer 版到底差在哪
Connector/NET 6.8.3 官方提供两种分发形态。installer 版是 MSI 安装包,装的时候会把 DLL 注册进 GAC、写入系统注册表、装 Visual Studio 集成组件,还在控制面板里创建一个卸载项。好处是全自动,坏处是重装或卸载不干净时,GAC 里残留多个版本,程序集绑定直接变玄学。我踩过最深的一次坑,是服务器上同时残留 6.7、6.8、6.9 三个版本,站点 bin 里放的是 6.8.3,加载时却匹配到 GAC 里的另一个版本,报错信息来回变,最后把所有 GAC 条目清掉才消停。
noinstall 版就是一个 zip 压缩包,里面是分层的 DLL 目录,附带文档和示例。它不写注册表、不进 GAC、不进控制面板,解压到哪就用哪。项目里直接引用解压目录下的 DLL,发布时让 DLL 跟着 bin 走。这个形态对生产部署特别友好:测试环境解压一份,生产环境拷贝一份,两边用同一个包,彻底杜绝“开发环境能跑、生产环境起不来”的版本差异问题。
我一般会这样分配:本地开发用 noinstall 解压目录做引用,生产服务器把 DLL 放进站点 bin 目录做私有部署,两边都用同一个 zip 里的文件。只有一种情况我才会考虑注册 GAC——IIS 服务器上多个站点要共用同一个连接器版本,且你确定不会再有第二个版本混进来。
3. 下载与解压部署:把 ZIP 变成项目里的引用 DLL
3.1 从官方存档页下载并校验
6.8.3 在 MySQL 官网的下载页里已经不在默认列表上了,需要进到 Connector/NET 下载区的 Archives 存档页,版本下拉框里选 6.8.3,Platform 选 Noinstall,拿到的文件就是 mysql-connector-net-6.8.3-noinstall.zip。下载的时候注意文件名里带 noinstall 的才是免安装版,拿成 Installer 的 MSI 就违背了我们选它的初衷。
解压位置我建议放在一个固定的工具目录,Windows 下一般用 D:\tools\mysql-connector-net-6.8.3。不要解压进某个项目目录里,因为多个项目可能共用这一份驱动,而且固定在工具目录里,以后升级替换时不用去每个项目里翻。解压完先看布局:包里通常有文档目录和示例目录,真正的 DLL 在按 net40、net45 命名的分层目录里。判断方法很简单——找到 MySql.Data.dll 就对了。
下载完先别急着用,核对校验和。这个年代的官方页面提供的是 MD5 或 SHA1 校验值,Windows 下用 PowerShell 一行命令算出来对比:
Get-FileHash -Path "D:\tools\mysql-connector-net-6.8.3-noinstall.zip" -Algorithm MD5把输出里的哈希值和下载页面给出的值逐位对比,一致再解压。这一步看起来多余,但我确实遇到过下载站中间人替换安装包的情况,尤其是这种老版本资源,被塞进带木马的 DLL 也不是没听说过。校验和是一个习惯问题,不差这一分钟。
3.2 在 VS 里添加引用:浏览路径、Copy Local 与特定版本
解压完成后的引用操作很直接:项目右键 → 添加引用 → 浏览,定位到解压目录里 net45 那一层,选中 MySql.Data.dll。如果项目目标框架是 .NET 4.0,就选 net40 那一层;目标框架是 4.5 或更高,net40 的 DLL 也能加载,但我习惯选 net45 层,毕竟新运行时加载老编译产物虽然兼容,没必要故意去踩边界。
选中 DLL 后,在解决方案资源管理器里找到这个引用,属性面板里有两个选项必须处理。第一个是“复制本地”必须设成 true,否则编译后输出目录里不会带 MySql.Data.dll,程序换台机器跑就报找不到程序集。第二个是“特定版本”建议设成 false,表示运行时不锁定强名称里的 6.8.3.0 版本号,以后在同一大版本内替换补丁 DLL 时不用改项目文件。
<Reference Include="MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"> <SpecificVersion>False</SpecificVersion> <HintPath>D:\tools\mysql-connector-net-6.8.3\assemblies\v4.5\MySql.Data.dll</HintPath> <Private>True</Private> </Reference>上面这段是 Visual Studio 在项目文件里生成的引用节点。HintPath 指向解压目录里的实际 DLL 路径,Private 为 True 就是“复制本地”的底层表示。如果你的项目是用命令行 msbuild 构建的,或者团队里有人直接用文本编辑器改 csproj,看这段代码比挨个点属性面板直观得多。
这个时代的 MySql.Data.dll 是纯托管程序集,不区分 32 位和 64 位,AnyCPU 的项目直接引用没问题。但要注意宿主进程的位数会影响连接层的行为,尤其是打开压缩协议或某些认证插件时,x86 进程下偶尔会有奇怪的表现。我的习惯是 Web 项目尽量用 x64 或 AnyCPU 发布,桌面程序按目标机器位数来,遇到连库异常先看 Windows 事件日志里有没有加载失败的记录。
3.3 要不要 gacutil 注册进 GAC:分场景决定
noinstall 版虽然不需要安装,但如果项目要在 IIS 服务器上部署,你仍然面临一个选择:DLL 放站点 bin 目录做私有部署,还是用 gacutil 注册进全局程序集缓存。
私有部署意味着每个站点的 bin 目录各放一份 MySql.Data.dll,互不干扰。这是我最推荐的方式,因为版本隔离最干净:A 站点用 6.8.3,B 站点用 8.0.22,互不影响,升级其中一个不会牵连另一个。缺点只是磁盘上多占一点空间,当今服务器根本不差这几 MB。
GAC 注册适合的场景是:一台 IIS 上有十几个站点全部使用同一个连接器版本,你不想每个 bin 里都维护一份,且你有绝对的版本控制纪律。操作命令如下:
gacutil /i D:\tools\mysql-connector-net-6.8.3\assemblies\v4.5\MySql.Data.dll gacutil /u MySql.Data第一行把 DLL 注册进 GAC,第二行按程序集名卸载。执行 gacutil 需要以管理员身份打开命令行,而且通常要装过 .NET SDK 才有这个工具。注册成功后,项目里引用这个 DLL 时就不需要 Copy Local 了,运行时直接从 GAC 解析。
GAC 最大的风险是版本残留。前面说过我踩过多个版本共存的坑,现象是站点 bin 里明明有正确的 DLL,运行时却去 GAC 里匹配到另一个版本,报错指向不清,查半天不知所云。所以我对 GAC 的态度是:能不进就不进。如果你决定注册,先在一台测试机上把整台服务器的 GAC 里所有 MySql.Data 清一遍,确保只有一个版本,再往生产上推。
4. 配置连接字符串:一条连接串里的关键参数和常见误用
4.1 连接字符串逐参数拆解:Server、Port、Charset、SslMode 怎么选
连接器引用好之后,第一个要过的关卡就是连接字符串。6.8.3 的连接串格式和现在差别不大,但有些参数细节能直接影响能不能连上。下面这条是我给一个 MySQL 5.6 老项目写的典型连接串:
string connStr = "Server=127.0.0.1;Port=3306;Database=testdb;Uid=app_user;Pwd=App@123456;Charset=utf8;Connection Timeout=10;Pooling=true;";逐个参数说清楚。Server 建议直接写 127.0.0.1,不要写 localhost。localhost 在部分环境会解析到 IPv6 的 ::1,而 MySQL 只监听了 IPv4,连接超时间接被拉长。如果应用和数据库不在同一台机器,Server 写数据库服务器的内网 IP,别写公网地址绕一大圈。Port 默认是 3306,如果服务端改了端口,这里必须同步改,否则报 Unable to connect 的概率极大。
Database 指定默认库,如果程序里每条 SQL 都带库名前缀也可以不写,但我建议写上,省得每次连接还要切库。Uid 和 Pwd 是数据库账号密码,千万不要用 root。给应用单独建一个账号,只授予这个应用实际需要的库权限,这是数据库安全的基本功,连接器配置只是顺便把这个原则落地。Charset 在老项目里尤其重要,库表是 utf8 就写 utf8,库表已经是 utf8mb4 就写 utf8mb4。写错字符集不会报错,但 emoji 和生僻字存进库会变成问号,这种数据损坏最难受,查不出来还不好修。
| 参数 | 我的推荐值 | 说明 |
|---|---|---|
| Server | 127.0.0.1 或内网 IP | 避免 localhost 触发 IPv6 解析 |
| Port | 3306 | 与服务端 port 配置一致 |
| Database | 显式指定 | 省去每条 SQL 带库名 |
| Charset | utf8 / utf8mb4 | 按库表实际字符集写 |
| Connection Timeout | 5-10 秒 | 默认值有时过长,影响故障感知 |
| Pooling | true | 高并发场景必须开 |
SslMode 是 6.8 时代开始有的参数。老环境里 MySQL 5.6 默认不启用 SSL,连接串里不写 SslMode 就能正常连。如果你的服务端开了 SSL 强制,连接串里要显式加 SslMode=Required 才能通过握手。我一般的原则是:能用明文内网就保持默认,不额外加 SSL 参数,减少一层握手变数;如果安全规范要求加密传输,再显式配置。
4.2 App.config 与 web.config 里的注册写法:DbProviderFactories 是关键
连接串写死在代码里对开发快速验证没问题,但生产环境要按环境切换,标准做法是放进配置文件的 connectionStrings 节点。WinForms 和控制台项目用 App.config,Web 项目用 web.config,结构是一样的:
<connectionStrings> <add name="MySqlConn" connectionString="Server=127.0.0.1;Port=3306;Database=testdb;Uid=app_user;Pwd=App@123456;Charset=utf8;" providerName="MySql.Data.MySqlClient" /> </connectionStrings>connectionStrings 节点把连接串集中管理,部署时改配置不用重新编译。providerName 写 MySql.Data.MySqlClient,这是 MySQL 连接器的 invariant 名称,后面 DbProviderFactories 注册时也必须用同一个名字,拼错一个字母都找不到提供程序。
如果你的项目用到了 Entity Framework 6,或者代码里用 DbProviderFactory.GetFactory 来创建连接,还必须注册 DbProviderFactories,否则 EF 运行时会报找不到 MySQL 提供程序。注册节点长这样:
<system.data> <DbProviderFactories> <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" /> </DbProviderFactories> </system.data>type 属性里的 PublicKeyToken 是最容易抄错的地方。网上大量帖子直接复制粘贴,如果和你实际引用的 DLL 强名称不一致,程序还是找不到。最稳的做法是先查你自己这份 DLL 的完整程序集名称:
[System.Reflection.AssemblyName]::GetAssemblyName("D:\tools\mysql-connector-net-6.8.3\assemblies\v4.5\MySql.Data.dll").FullName把输出结果里的版本号和 PublicKeyToken 填进 type 属性。这个查询命令我每次部署新环境都会跑一遍,因为不同来源的 DLL 可能带有不同的程序集签名,照抄网上配置翻车是常事。
4.3 常见误用:把 8.0 的配置经验套到 6.8.3 上
网上搜连接串配置,搜出来的一大半是 Connector/NET 8.x 的写法,里面有 AllowPublicKeyRetrieval、TlsVersion、SslMode=Preferred 这类参数。这些在 6.8.3 里要么不存在,要么行为完全不同,盲目抄到老连接器上,轻则参数被忽略,重则连接行为和你预期不一致,排查方向直接跑偏。
具体来说,AllowPublicKeyRetrieval 是 8.0 为了解决 caching_sha2_password 公钥获取问题加的开关,6.8.3 压根不认识这个键。如果你在 6.8.3 的连接串里写它,它只会被连接器当未知项忽略,但你的注意力会被吸引到“是不是这个参数没生效”,浪费时间。SslMode=Preferred 也是新版才有的一种模式,老版本的 SslMode 取值是 None、Required、VerifyCA、VerifyFull 四个,写个 Preferred 进去行为会怎样全看实现心情。
反过来也一样:如果你拿着 6.8.3 的连接串去配新版驱动,新版默认的 SSL 行为更严格,老连接串里什么都没写,就可能握手失败。连接字符串不跨大版本直接复制,这是我在团队里反复强调的一条。老环境就用老驱动老参数,连接串保持精简,Server、Port、Uid、Pwd、Database、Charset 这六项就覆盖了九成场景,剩下的参数真需要时再加。
5. 安装排查与避坑:noinstall 版最容易翻车的五个场景
5.1 引用后代码里找不到 MySqlConnection
现象:在代码文件顶部写了 using MySql.Data.MySqlClient; 后,编译器报 CS0246,提示找不到类型或命名空间。代码里 MySqlConnection 下面画满红色波浪线。
原因就三种:引用没加成功、加错了解压目录、项目目标框架和 DLL 要求的运行时对不上。最隐蔽的是第二种,你可能选中了 docs 目录下某个同名占位文件,或者引到了 samples 里的示例程序集,实际功能 DLL 根本没进引用列表。目标框架 Client Profile 也会触发这个错,但更多时候是因为项目里同时存在多个框架版本配置,引用的程序集没被当前框架识别。
解决:先看解决方案资源管理器里的引用节点,MySql.Data 前面有没有黄色警告图标。有警告就先删掉重新浏览添加。再确认你选的是解压目录里 net40 或 net45 分层的 MySql.Data.dll,不是文档目录里的同名文件。最后把项目目标框架改成 .NET Framework 4 或 4.5 完整版,编译一次看是否消除。这里没有捷径,三个检查点逐项过一遍,基本五分钟内能找到问题。
5.2 运行时抛 Could not load file or assembly
现象:编译完全通过,程序一启动就抛 FileNotFoundException,消息里带 MySql.Data, Version=6.8.3.0 的字样。有时候报的是 BadImageFormatException,提示程序集无法加载。
原因:最常见的是 bin 目录里根本没有 MySql.Data.dll。引用虽然加上了,但“复制本地”设成了 false,编译输出目录里自然不会带。另一个原因是 GAC 里有多个版本,运行时按强名称匹配到了不对的版本,或者机器上还有另一份旧版 DLL 被系统优先加载了。
解决:第一件事去 bin 目录看有没有 MySql.Data.dll,没有就把引用的“复制本地”改成 true 重新编译。第二件事打开项目 bin 目录里的 .config 文件,看有没有 assemblyBinding 重定向配置,这可能是团队里其他人为了兼容旧版本加过的绑定规则,删掉重试。如果机器 GAC 里注册过连接器,执行 gacutil /u MySql.Data 把全局版本清掉,让站点 bin 里的私有部署生效。BadImageFormatException 则多半是目标框架选择出了问题,把平台目标改成 x64 或 AnyCPU 再试。
5.3 连接时报 Unable to connect to any of the specified MySQL hosts
现象:程序运行到 conn.Open() 时抛 MySqlException,消息是标准的连接失败。这个报错几乎是所有 MySQL 连接问题的通用出口,所以看不出太多有效信息,全靠排查。
原因排查有个固定顺序。第一,服务端端口通不通,直接在应用服务器上执行 telnet 127.0.0.1 3306,Services 里没有 Telnet 客户端就用 PowerShell 测 TCP:
Test-NetConnection -ComputerName 127.0.0.1 -Port 3306TcpTestSucceeded 为 False,说明网络层面就不通,查服务端是否监听、云安全组或服务器防火墙是否放行 3306。TcpTestSucceeded 为 True,说明端口通,问题在 MySQL 用户权限上。
账号 host 限制是第二个高发点。MySQL 的用户授权格式是 user@host,如果服务端只建了 root@localhost,而应用从另一台机器连接,即使密码对也会被拒绝。这时在服务端执行 SELECT user, host FROM mysql.user; 看有没有对应网段的账号,没有就建一个:
CREATE USER 'app_user'@'192.168.10.%' IDENTIFIED BY 'App@123456'; GRANT ALL PRIVILEGES ON testdb.* TO 'app_user'@'192.168.10.%'; FLUSH PRIVILEGES;最后还有一种情况:MySQL 配置了 bind-address 只回环监听,外部 IP 连接被服务端自己拒绝。查看 my.ini 或 my.cnf 里 bind-address 是不是 127.0.0.1,改成 0.0.0.0 并重启服务才能远程连。
5.4 连 MySQL 8.0 服务端时报认证失败
现象:连接字符串完全正确,端口也通,Open 时却报 Authentication method ‘caching_sha2_password’ not supported,或者干脆是 Reading from the stream has failed。
原因非常明确:MySQL 8.0 默认认证插件改成了 caching_sha2_password,而 Connector/NET 6.8.3 的握手实现不包含这个插件。这不是密码错,也不是端口问题,纯粹是驱动和服务端在认证协议上年代错配。
解决方案有两个方向。如果你必须保留 6.8.3 驱动,那就在服务端把该用户的认证插件改回 mysql_native_password:
ALTER USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'App@123456'; FLUSH PRIVILEGES;改完之后再连接就能通过。但注意这是降低安全等级的妥协方案,生产环境里建议走第二个方向——把驱动升级到 Connector/NET 8.x。新版驱动原生支持 caching_sha2_password,同时依然兼容 mysql_native_password,两边都考虑到了,选它才是长期答案。这条坑我每年都会遇到几次,每次都会提醒一句:驱动版本不跟着服务端走,排障排到怀疑人生。
5.5 EF6 项目报 The provider is not registered
现象:Entity Framework 6 项目运行时报错,提示 MySql.Data.MySqlClient 的 provider 没有注册,或者 DbProviderFactory 无法加载。用 DbProviderFactories.GetFactory("MySql.Data.MySqlClient") 取工厂时返回 null。
原因:EF6 不是直接用你代码里的连接字符串,而是通过 DbProviderFactories 配置去定位提供程序。项目引用了 MySql.Data.Entity.EF6.dll 还不够,必须在配置文件里注册 factory。没有注册时,运行时不知道 MySql.Data.MySqlClient 对应哪个工厂类。
解决:按前面 4.2 小节的 system.data 配置,把 DbProviderFactories 节点加到项目配置文件里。type 属性里的 PublicKeyToken 一定要用 Get-AssemblyName 查出来的真实值,这是我反复强调的细节。注册完重启程序,再走一遍 EF 初始化流程就能过。
还有一个小坑:EF6 需要 MySql.Data.Entity.EF6.dll,而老式 EF4/EF5 用的是 MySql.Data.Entity.dll,两个文件不能混着用。项目里如果只引了其中一个,另一个功能就会报 not registered。检查一下你是否把对应版本的 EF 程序集也引进去了。
6. 验证跑通:最小连接测试与 PowerShell 快速探测
每装好一个环境,我第一步不会急着开 Visual Studio 建项目,而是先用 PowerShell 直接把 DLL 加载起来连一次。这样能把“DLL 能不能用”和“项目配置有没有问题”两件事分开验证。
Add-Type -Path "D:\tools\mysql-connector-net-6.8.3\assemblies\v4.5\MySql.Data.dll" $connStr = "Server=127.0.0.1;Port=3306;Database=testdb;Uid=app_user;Pwd=App@123456;Charset=utf8;" $conn = New-Object MySql.Data.MySqlClient.MySqlConnection($connStr) $conn.Open() $cmd = $conn.CreateCommand() $cmd.CommandText = "SELECT VERSION()" $cmd.ExecuteScalar() $conn.Close()这段脚本如果顺利,会输出 MySQL 的版本号,比如 5.6.51。看到版本号,说明 DLL 加载正常、端口通、账号权限对、字符集协商成功,前面所有配置都没问题。如果这一步失败,问题就在环境本身,和项目代码无关,先按第五章的排查顺序处理。
PowerShell 验证通过后,再进项目里做正式确认。控制台项目里放下面这段最小代码,跑通就算整个链路闭合:
using System; using MySql.Data.MySqlClient; class Program { static void Main() { string connStr = "Server=127.0.0.1;Port=3306;Database=testdb;Uid=app_user;Pwd=App@123456;Charset=utf8;"; using (var conn = new MySqlConnection(connStr)) { conn.Open(); using (var cmd = new MySqlCommand("SELECT VERSION()", conn)) { Console.WriteLine("MySQL: " + cmd.ExecuteScalar()); } using (var cmd = new MySqlCommand("SELECT COUNT(*) FROM testdb.users", conn)) { Console.WriteLine("Users count: " + cmd.ExecuteScalar()); } } } }验证时看三个检查点:第一是 VERSION() 有正常输出,证明连接和认证全通;第二是 COUNT 查询有返回,证明账号对目标库有真实读写权限;第三是用完的连接对象都走了 Dispose,靠 using 代码块保证。三个全过,这套 noinstall 部署就没有遗留问题。
输出目录最好再看一眼,bin 下确实带上了 MySql.Data.dll,这样部署到别的机器才不会缺依赖。从那以后我每次给项目装这类免安装组件,无论多简单,都会强制先跑一遍最小连接测试再交给项目使用,这个习惯帮我拦下了至少十次因为版本误配导致的半夜紧急排障。6.8.3 虽然老,按这套流程走完它依然能用得稳当,希望帮到你。
本文还有配套的精品资源,点击获取