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

如何在C# .NET中将Excel工作表导入MySQL数据库?报错求助

问题分析与解决

错误原因

你的Uploadbutton_Click方法存在两个核心问题:

  • SQL语句错误:select * from [Sheet1$]是Excel专属的查询语法,MySQL不识别[Sheet1$]这种格式,直接触发了SQL语法报错。
  • 逻辑完全倒置:这段代码是从MySQL读取数据到DataGridView,而非把已加载到DataGridView的Excel数据上传到MySQL。

正确实现思路

要完成Excel数据上传MySQL的需求,需按以下逻辑执行:

  1. 从DataGridView中提取已加载的Excel数据表
  2. 建立MySQL连接,将数据表中的数据批量插入到预先创建好的MySQL目标表中(需确保目标表结构与Excel列匹配)

修正后的代码

private void Uploadbutton_Click(object sender, EventArgs e)
{
    // 先获取DataGridView里的Excel数据表
    if (dataGridView1.DataSource is not DataTable dt)
    {
        MessageBox.Show("请先选择Excel文件加载数据");
        return;
    }

    string connectionString = "server=localhost; database=Excel; uid=root; pwd=ednadarling@5";
    
    // 使用using自动管理连接释放,避免资源泄漏
    using (MySqlConnection conn = new MySqlConnection(connectionString))
    {
        conn.Open();
        
        // 用MySqlBulkCopy实现批量插入,比逐行插入效率更高
        using (MySqlBulkCopy bulkCopy = new MySqlBulkCopy(conn))
        {
            // 指定MySQL中的目标表名(需提前创建好)
            bulkCopy.DestinationTableName = "excel_data";
            
            // 自动匹配列名(要求Excel列名与MySQL表列名一致)
            foreach (DataColumn col in dt.Columns)
            {
                bulkCopy.ColumnMappings.Add(col.ColumnName, col.ColumnName);
            }
            
            try
            {
                bulkCopy.WriteToServer(dt);
                MessageBox.Show("数据上传成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show($"上传失败:{ex.Message}");
            }
        }
    }
}

关键注意事项

  • 提前在MySQL的Excel数据库中创建目标表excel_data,表的列名、数据类型必须与Excel工作表的列对应匹配。
  • 如果Excel列名和MySQL表列名不一致,需手动调整列映射,比如bulkCopy.ColumnMappings.Add("Excel列名", "MySQL列名")。
  • 原SelectExcel_Click方法可保留,它负责将Excel数据加载到DataGridView的逻辑是正确的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 21:52:44