winform窗体实现excel(大量数据)导入mysql数据库
时间: 2023-12-09 16:03:09 浏览: 346
C#winform实现Excel导入数据库_c#数据库_C#_winformexcel
要实现这个功能,你需要进行以下步骤:
1. 在Winform窗体中添加一个“打开文件”按钮,让用户可以选择要导入的Excel文件。
2. 使用C#的Excel Interop库或第三方库,读取Excel文件中的数据。如果数据量很大,可以考虑使用分页读取的方式,避免内存溢出。
3. 将读取到的数据存储在内存中,可以使用List、DataTable等数据结构。
4. 使用C#的MySQL Connector库连接到MySQL数据库,将数据写入数据库中。同样需要考虑性能问题,可以使用事务等方式提高写入效率。
下面是一个简单的示例代码,供参考:
```csharp
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using Excel = Microsoft.Office.Interop.Excel;
namespace ExcelToMySQL
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnOpen_Click(object sender, EventArgs e)
{
// 打开Excel文件
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel文件|*.xlsx;*.xls";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 读取Excel文件中的数据
Excel.Application excel = new Excel.Application();
Excel.Workbook workbook = excel.Workbooks.Open(openFileDialog.FileName);
Excel.Worksheet worksheet = workbook.Sheets[1];
Excel.Range range = worksheet.UsedRange;
List<string[]> dataList = new List<string[]>();
for (int i = 2; i <= range.Rows.Count; i++)
{
string[] data = new string[range.Columns.Count];
for (int j = 1; j <= range.Columns.Count; j++)
{
data[j - 1] = range.Cells[i, j].Value.ToString();
}
dataList.Add(data);
}
workbook.Close();
excel.Quit();
// 将数据写入MySQL数据库
string connStr = "server=localhost;user=root;database=test;password=123456;";
MySqlConnection conn = new MySqlConnection(connStr);
conn.Open();
MySqlTransaction transaction = conn.BeginTransaction();
try
{
foreach (string[] data in dataList)
{
string sql = "INSERT INTO table_name (column1, column2, column3) VALUES (@value1, @value2, @value3)";
MySqlCommand command = new MySqlCommand(sql, conn, transaction);
command.Parameters.AddWithValue("@value1", data[0]);
command.Parameters.AddWithValue("@value2", data[1]);
command.Parameters.AddWithValue("@value3", data[2]);
command.ExecuteNonQuery();
}
transaction.Commit();
MessageBox.Show("导入成功!");
}
catch (Exception ex)
{
transaction.Rollback();
MessageBox.Show("导入失败:" + ex.Message);
}
conn.Close();
}
}
}
}
```
在上面的示例代码中,需要将“table_name”和“column1/2/3”替换成实际的表名和列名。此外,还需要将“server”、“user”、“database”和“password”替换成实际的MySQL连接信息。
阅读全文