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

将Excel文件中的数据存储至远程MySQL数据库(C#桌面应用)

C#桌面应用:Excel数据导入远程MySQL解决方案

1. 前置准备

  • 安装NuGet依赖包:
    • EPPlus/NPOI:用于读取Excel文件(EPPlus适配xlsx,NPOI兼容xls/xlsx;EPPlus 5+需商业授权,非商用可选用4.x版本)
    • MySqlConnector:MySQL官方推荐的.NET数据驱动,稳定性优于旧版MySql.Data
  • 配置远程MySQL权限:确保数据库服务器防火墙开放3306端口(或自定义端口),且MySQL账号允许你的客户端IP访问,同时拥有目标表的INSERT权限
  • 提前创建MySQL表:表结构需与Excel数据字段匹配(如Excel文本对应VARCHAR,数字对应INT/DECIMAL等)

2. 读取Excel数据(以EPPlus为例)

using OfficeOpenXml;
using System.Data;
using System.IO;

// 非商用场景设置许可证上下文
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;

DataTable excelTable = new DataTable();
using (var package = new ExcelPackage(new FileInfo(@"C:\example.xlsx")))
{
    var worksheet = package.Workbook.Worksheets[0]; // 读取第一个工作表
    // 加载表头
    for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++)
    {
        excelTable.Columns.Add(worksheet.Cells[1, col].Text);
    }
    // 加载数据行
    for (int row = worksheet.Dimension.Start.Row + 1; row <= worksheet.Dimension.End.Row; row++)
    {
        DataRow dataRow = excelTable.NewRow();
        for (int col = worksheet.Dimension.Start.Column; col <= worksheet.Dimension.End.Column; col++)
        {
            dataRow[col - 1] = worksheet.Cells[row, col].Text;
        }
        excelTable.Rows.Add(dataRow);
    }
}

3. 批量插入MySQL数据

方式1:循环参数化插入(小数据量)

using MySqlConnector;

string connStr = "server=远程MySQL地址;database=你的数据库名;user=账号;password=密码;port=3306;SslMode=Required;";

using (var conn = new MySqlConnection(connStr))
{
    conn.Open();
    string insertSql = "INSERT INTO target_table (col1, col2, col3) VALUES (@val1, @val2, @val3)";
    using (var cmd = new MySqlCommand(insertSql, conn))
    {
        // 定义参数
        cmd.Parameters.Add("@val1", MySqlDbType.VarChar);
        cmd.Parameters.Add("@val2", MySqlDbType.Int32);
        cmd.Parameters.Add("@val3", MySqlDbType.Decimal);

        foreach (DataRow row in excelTable.Rows)
        {
            // 赋值参数(需根据实际数据类型做校验转换)
            cmd.Parameters["@val1"].Value = row["Excel表头1"].ToString();
            cmd.Parameters["@val2"].Value = int.TryParse(row["Excel表头2"].ToString(), out int val2) ? val2 : 0;
            cmd.Parameters["@val3"].Value = decimal.TryParse(row["Excel表头3"].ToString(), out decimal val3) ? val3 : 0;
            
            cmd.ExecuteNonQuery();
        }
    }
}

方式2:MySqlBulkCopy(大数据量推荐)

using MySqlConnector;

string connStr = "server=远程MySQL地址;database=你的数据库名;user=账号;password=密码;port=3306;SslMode=Required;";

using (var conn = new MySqlConnection(connStr))
{
    conn.Open();
    using (var bulkCopy = new MySqlBulkCopy(conn))
    {
        bulkCopy.DestinationTableName = "target_table";
        // 映射Excel列与MySQL表列(若列名一致可省略此步骤)
        bulkCopy.ColumnMappings.Add("Excel表头1", "col1");
        bulkCopy.ColumnMappings.Add("Excel表头2", "col2");
        bulkCopy.ColumnMappings.Add("Excel表头3", "col3");
        
        bulkCopy.WriteToServer(excelTable);
    }
}

4. 关键注意事项

  • 数据校验:插入前必须验证Excel数据格式,避免类型转换异常(比如用int.TryParse/decimal.TryParse做容错处理)
  • 异常捕获:添加try-catch块捕获文件读取、数据库连接、插入过程中的异常,返回明确错误提示
  • 性能优化:数据量超过1000条时,优先使用MySqlBulkCopy,效率远高于循环插入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:25:16