数据库 · MySQL
开发专题 · MySql.Data(Connector/NET)引用、连接字符串与增删改查
本页说明如何在 .NET Framework 4.8 窗体(或控制台)项目中使用 MySQL:在 LCode 中引用 MySql.Data(Oracle Connector/NET,或等效托管驱动)、编写连接字符串,以及用 ADO.NET 完成增删改查。操作文案以 LCode 中文界面为准;凡有代码均同时给出 C# 5.0 与 VB.NET。网格绑定与自定义列见 数据表单与自定义列;其他库一笔带过见 数据库 · 其他。
引用哪些 DLL / NuGet 或本地程序集
推荐使用官方 ADO.NET 提供程序 MySql.Data(Connector/NET;命名空间 MySql.Data.MySqlClient)。LCode 当前精简版不内置该程序集,也不提供「一键安装包」向导;请自行取得 MySql.Data.dll 后,用「添加引用」浏览加入工程。
| 文件 / 项 | 作用 |
|---|---|
MySql.Data.dll |
托管程序集(Connector/NET);MySqlConnection、MySqlCommand、MySqlDataReader 等位于 MySql.Data.MySqlClient。在 LCode 中添加程序集引用(本地复制建议为 True) |
NuGet 包 MySql.Data |
在 Visual Studio 等环境可从包还原得到上述 DLL。LCode 主界面 NuGet 包管理暂不支持,待更新完善——请在外部还原或手工下载后,把 DLL 放进解决方案目录再浏览引用 |
MySqlConnector(可选) |
另一套开源 ADO.NET 驱动,类型名相近但命名空间为 MySqlConnector。本手册以 MySql.Data / Connector/NET 为准;改用时 using/Imports 与包版本须一致 |
在 LCode 中添加引用
- 将取得的
MySql.Data.dll放到解决方案旁的固定目录(例如libs\),便于相对路径与版本管理。 - 在项目浏览器中选中窗体(或控制台)项目 → 右键 → 添加引用(或菜单 项目 → 添加引用)。
- 打开 浏览 页签 → 选中
MySql.Data.dll→ 确定。 - 在引用节点中选中该项,属性里把「本地复制」设为 True(部署时 DLL 须出现在 EXE 同目录)。
- 在代码文件顶部加入
using MySql.Data.MySqlClient;(C#)或Imports MySql.Data.MySqlClient(VB.NET)。 - 菜单 编译 → 编译解决方案(F8),确认无「找不到类型或命名空间」错误。
提示:添加引用的页签与「本地复制」含义见 引用 DLL。目标机须能访问 MySQL 服务(本机或网络),并具备登录账号与库权限;仅引用 DLL 并不能代替安装/启动服务器。
连接字符串
MySQL 通过主机、端口、库名与用户口令定位。常用键包括 Server(或 Host)、Port(默认 3306)、Database、Uid(或 User ID)、Pwd(或 Password),以及 Charset=utf8mb4 等。连接前请确认 MySQL 服务已启动,且防火墙与用户主机权限已放行。
| 连接字符串示例 | 说明 |
|---|---|
Server=localhost;Port=3306;Database=AppDb;Uid=appuser;Pwd=秘密;Charset=utf8mb4; |
本机默认端口;显式指定库与字符集(推荐 utf8mb4) |
Server=127.0.0.1;Database=AppDb;User ID=appuser;Password=秘密; |
与上一行等价的常用写法(省略 Port 时默认 3306) |
Server=192.168.1.20;Port=3306;Database=AppDb;Uid=appuser;Pwd=秘密;SslMode=None; |
局域网主机。开发环境偶发 TLS/证书问题时可临时放宽;生产请按安全策略配置 SSL |
Server=localhost;Database=AppDb;Uid=root;Pwd=秘密;Allow User Variables=True; |
需会话用户变量等特性时附加选项;勿把 root 口令写死进公开仓库 |
C#
using MySql.Data.MySqlClient;
string connStr =
"Server=localhost;Port=3306;Database=AppDb;Uid=appuser;Pwd=秘密;Charset=utf8mb4;";
using (MySqlConnection conn = new MySqlConnection(connStr))
{
conn.Open();
// …执行命令…
}
VB.NET
Imports MySql.Data.MySqlClient
Dim connStr As String =
"Server=localhost;Port=3306;Database=AppDb;Uid=appuser;Pwd=秘密;Charset=utf8mb4;"
Using conn As New MySqlConnection(connStr)
conn.Open()
' …执行命令…
End Using
增删改查
以下示例假定库 AppDb 已存在,且表 Items 将按「建表」小节创建(或已预先建好)。参数请用 @Name 占位,避免拼接 SQL。类名以 MySql.Data.MySqlClient 为准(MySqlConnection、MySqlCommand、MySqlParameter、MySqlDataReader)。
建表(可重复执行)
C#
const string SqlCreate =
"CREATE TABLE IF NOT EXISTS Items (" +
"Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " +
"Name VARCHAR(100) NOT NULL, " +
"Qty INT NOT NULL DEFAULT 0) " +
"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
using (MySqlCommand cmd = new MySqlCommand(SqlCreate, conn))
{
cmd.ExecuteNonQuery();
}
VB.NET
Const SqlCreate As String =
"CREATE TABLE IF NOT EXISTS Items (" &
"Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " &
"Name VARCHAR(100) NOT NULL, " &
"Qty INT NOT NULL DEFAULT 0) " &
"ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
Using cmd As New MySqlCommand(SqlCreate, conn)
cmd.ExecuteNonQuery()
End Using
插入(Create)
C#
using (MySqlCommand cmd = new MySqlCommand(
"INSERT INTO Items (Name, Qty) VALUES (@Name, @Qty);", conn))
{
cmd.Parameters.AddWithValue("@Name", "螺丝");
cmd.Parameters.AddWithValue("@Qty", 100);
cmd.ExecuteNonQuery();
}
VB.NET
Using cmd As New MySqlCommand(
"INSERT INTO Items (Name, Qty) VALUES (@Name, @Qty);", conn)
cmd.Parameters.AddWithValue("@Name", "螺丝")
cmd.Parameters.AddWithValue("@Qty", 100)
cmd.ExecuteNonQuery()
End Using
查询(Read)
C#
using (MySqlCommand cmd = new MySqlCommand(
"SELECT Id, Name, Qty FROM Items ORDER BY Id;", conn))
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
int qty = reader.GetInt32(2);
Console.WriteLine(id + "\t" + name + "\t" + qty);
}
}
VB.NET
Using cmd As New MySqlCommand(
"SELECT Id, Name, Qty FROM Items ORDER BY Id;", conn)
Using reader As MySqlDataReader = cmd.ExecuteReader()
While reader.Read()
Dim id As Integer = reader.GetInt32(0)
Dim name As String = reader.GetString(1)
Dim qty As Integer = reader.GetInt32(2)
Console.WriteLine(id & vbTab & name & vbTab & qty)
End While
End Using
End Using
更新(Update)
C#
using (MySqlCommand cmd = new MySqlCommand(
"UPDATE Items SET Qty = @Qty WHERE Id = @Id;", conn))
{
cmd.Parameters.AddWithValue("@Qty", 120);
cmd.Parameters.AddWithValue("@Id", 1);
int rows = cmd.ExecuteNonQuery();
Console.WriteLine("更新行数: " + rows);
}
VB.NET
Using cmd As New MySqlCommand(
"UPDATE Items SET Qty = @Qty WHERE Id = @Id;", conn)
cmd.Parameters.AddWithValue("@Qty", 120)
cmd.Parameters.AddWithValue("@Id", 1)
Dim rows As Integer = cmd.ExecuteNonQuery()
Console.WriteLine("更新行数: " & rows)
End Using
删除(Delete)
C#
using (MySqlCommand cmd = new MySqlCommand(
"DELETE FROM Items WHERE Id = @Id;", conn))
{
cmd.Parameters.AddWithValue("@Id", 1);
cmd.ExecuteNonQuery();
}
VB.NET
Using cmd As New MySqlCommand(
"DELETE FROM Items WHERE Id = @Id;", conn)
cmd.Parameters.AddWithValue("@Id", 1)
cmd.ExecuteNonQuery()
End Using
填充 DataGridView:可用
MySqlDataAdapter + DataTable,再赋给 DataGridView.DataSource。列外观与行编辑流程见 数据表单与自定义列(该页以 Access 为主讲,绑定写法可对照迁移)。
注意事项
| 注意点 | 说明 |
|---|---|
| 服务与账号 | 连接前确认 mysqld 已运行;用户须对目标库有相应权限。连不上时先用官方客户端或 mysql CLI 用同一主机/账号验证。 |
| 字符集 | 库表与连接串建议统一 utf8mb4,避免中文与 emoji 乱码。仅改表字符集不够时,还须在连接串加 Charset=utf8mb4。 |
| 网络与防火墙 | 远程连接需放行端口(默认 3306),并在 MySQL 用户主机列(如 'appuser'@'%')允许来源;云主机还须安全组放行。 |
| SSL / 认证插件 | 较新 MySQL 默认认证或强制 SSL 时,旧版 Connector/NET 可能报认证/SSL 错误。可升级驱动、调整服务器插件,或按驱动文档设置 SslMode 等(生产勿盲目关闭加密)。 |
| 连接与资源 | 短用短关:优先 using/Using 释放 MySqlConnection、MySqlCommand、MySqlDataReader。长时间占连接会耗尽连接池。 |
| SQL 注入 | 用户输入一律走参数(@Name),不要字符串拼接进 SQL。 |
| NuGet / 可视化数据源 | LCode 主界面 NuGet 包管理、以及「可视化数据库设计器 / 数据源向导」针对 MySQL 的一站式配置暂不支持,待更新完善。请按本页手工浏览引用与手写 ADO.NET。 |
| MySqlConnector | 若改用该程序集,命名空间变为 MySqlConnector,部分连接选项名可能不同,须对照该包文档调整。 |
相关阅读
- 引用 DLL — 浏览托管程序集、「本地复制」与常见加载错误
- 数据表单与自定义列 — DataGridView 绑定与自定义列
- 数据库 · SQL Server — 同类 ADO.NET 对照
- 数据库 · SQLite — 本地文件库对照
- 运行与编译 — 平台目标、输出目录与运行验证
- C# / VB.NET 窗体应用入门 — 可挂接数据库的窗体侧入门