如何在C# .NET中将Excel工作表导入MySQL数据库?报错求助
问题分析与解决
错误原因
你的Uploadbutton_Click方法存在两个核心问题:
- SQL语句错误:
select * from [Sheet1$]是Excel专属的查询语法,MySQL不识别[Sheet1$]这种格式,直接触发了SQL语法报错。 - 逻辑完全倒置:这段代码是从MySQL读取数据到DataGridView,而非把已加载到DataGridView的Excel数据上传到MySQL。
正确实现思路
要完成Excel数据上传MySQL的需求,需按以下逻辑执行:
- 从DataGridView中提取已加载的Excel数据表
- 建立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
相关产品推荐
相关产品推荐

