本页说明如何在 .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);MySqlConnectionMySqlCommandMySqlDataReader 等位于 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 中添加引用

  1. 将取得的 MySql.Data.dll 放到解决方案旁的固定目录(例如 libs\),便于相对路径与版本管理。
  2. 在项目浏览器中选中窗体(或控制台)项目 → 右键 → 添加引用(或菜单 项目 → 添加引用)。
  3. 打开 浏览 页签 → 选中 MySql.Data.dll → 确定。
  4. 在引用节点中选中该项,属性里把「本地复制」设为 True(部署时 DLL 须出现在 EXE 同目录)。
  5. 在代码文件顶部加入 using MySql.Data.MySqlClient;(C#)或 Imports MySql.Data.MySqlClient(VB.NET)。
  6. 菜单 编译 → 编译解决方案F8),确认无「找不到类型或命名空间」错误。
提示:添加引用的页签与「本地复制」含义见 引用 DLL。目标机须能访问 MySQL 服务(本机或网络),并具备登录账号与库权限;仅引用 DLL 并不能代替安装/启动服务器。

连接字符串

MySQL 通过主机、端口、库名与用户口令定位。常用键包括 Server(或 Host)、Port(默认 3306)、DatabaseUid(或 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 为准(MySqlConnectionMySqlCommandMySqlParameterMySqlDataReader)。

建表(可重复执行)

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 释放 MySqlConnectionMySqlCommandMySqlDataReader。长时间占连接会耗尽连接池。
SQL 注入 用户输入一律走参数(@Name),不要字符串拼接进 SQL。
NuGet / 可视化数据源 LCode 主界面 NuGet 包管理、以及「可视化数据库设计器 / 数据源向导」针对 MySQL 的一站式配置暂不支持,待更新完善。请按本页手工浏览引用与手写 ADO.NET。
MySqlConnector 若改用该程序集,命名空间变为 MySqlConnector,部分连接选项名可能不同,须对照该包文档调整。

相关阅读