使用c# winform制作目录导入工具,将excel表(数据量大)导入mysql数据库详细步骤
时间: 2024-02-19 11:02:35 浏览: 162
好的,以下是详细的步骤:
1. 打开 Visual Studio,新建一个 WinForm 项目。
2. 添加 Excel 操作库和 MySQL 数据库驱动程序到项目引用中。可以使用 NuGet 包管理器来安装这些库。
3. 在 WinForm 界面上添加一个“选择文件”按钮和一个“导入”按钮,以及一个文本框用于显示导入进度。
4. 在“选择文件”按钮的 click 事件中,使用 OpenFileDialog 对话框来选择要导入的 Excel 文件。
```
private void btnSelectFile_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Excel 文件|*.xlsx;*.xls";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtFilePath.Text = openFileDialog.FileName;
}
}
```
5. 在“导入”按钮的 click 事件中,首先读取 Excel 文件中的数据。您可以使用 ExcelDataReader 库来实现这一点。读取完数据后,将其存储到一个 DataTable 中。
```
private void btnImport_Click(object sender, EventArgs e)
{
string filePath = txtFilePath.Text;
if (string.IsNullOrEmpty(filePath))
{
MessageBox.Show("请选择要导入的 Excel 文件!");
return;
}
try
{
using (var stream = File.Open(filePath, FileMode.Open, FileAccess.Read))
{
using (var reader = ExcelReaderFactory.CreateReader(stream))
{
DataTable dataTable = new DataTable();
dataTable.Load(reader);
dataGridView.DataSource = dataTable;
ImportToDatabase(dataTable);
}
}
}
catch (Exception ex)
{
MessageBox.Show("导入失败:" + ex.Message);
}
}
```
6. 使用 MySQL 数据库驱动程序连接 MySQL 数据库,并创建一个表来存储 Excel 数据。您可以使用以下代码来创建表:
```
private void CreateDatabaseTable()
{
string connectionString = "server=localhost;user=root;password=123456;database=mydatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "CREATE TABLE IF NOT EXISTS `excel_data` (`id` INT NOT NULL AUTO_INCREMENT, `column1` VARCHAR(255), `column2` VARCHAR(255), `column3` VARCHAR(255), PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;";
command.ExecuteNonQuery();
}
}
```
7. 遍历 DataTable 中的每一行,将数据插入到 MySQL 数据库中。您可以使用以下代码来实现这一点:
```
private void ImportToDatabase(DataTable dataTable)
{
string connectionString = "server=localhost;user=root;password=123456;database=mydatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO excel_data (column1, column2, column3) VALUES (@column1, @column2, @column3)";
command.Parameters.Add("@column1", MySqlDbType.VarChar);
command.Parameters.Add("@column2", MySqlDbType.VarChar);
command.Parameters.Add("@column3", MySqlDbType.VarChar);
foreach (DataRow row in dataTable.Rows)
{
command.Parameters["@column1"].Value = row["column1"].ToString();
command.Parameters["@column2"].Value = row["column2"].ToString();
command.Parameters["@column3"].Value = row["column3"].ToString();
command.ExecuteNonQuery();
}
}
}
```
8. 在插入数据时,使用事务来确保数据的完整性和一致性。您可以使用以下代码来实现这一点:
```
private void ImportToDatabase(DataTable dataTable)
{
string connectionString = "server=localhost;user=root;password=123456;database=mydatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO excel_data (column1, column2, column3) VALUES (@column1, @column2, @column3)";
command.Parameters.Add("@column1", MySqlDbType.VarChar);
command.Parameters.Add("@column2", MySqlDbType.VarChar);
command.Parameters.Add("@column3", MySqlDbType.VarChar);
MySqlTransaction transaction = null;
try
{
transaction = connection.BeginTransaction();
command.Transaction = transaction;
foreach (DataRow row in dataTable.Rows)
{
command.Parameters["@column1"].Value = row["column1"].ToString();
command.Parameters["@column2"].Value = row["column2"].ToString();
command.Parameters["@column3"].Value = row["column3"].ToString();
command.ExecuteNonQuery();
}
transaction.Commit();
MessageBox.Show("导入成功!");
}
catch (Exception ex)
{
transaction.Rollback();
MessageBox.Show("导入失败:" + ex.Message);
}
}
}
```
9. 在导入数据时,显示导入进度。您可以使用以下代码来实现这一点:
```
private void ImportToDatabase(DataTable dataTable)
{
string connectionString = "server=localhost;user=root;password=123456;database=mydatabase;";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MySqlCommand command = connection.CreateCommand();
command.CommandText = "INSERT INTO excel_data (column1, column2, column3) VALUES (@column1, @column2, @column3)";
command.Parameters.Add("@column1", MySqlDbType.VarChar);
command.Parameters.Add("@column2", MySqlDbType.VarChar);
command.Parameters.Add("@column3", MySqlDbType.VarChar);
MySqlTransaction transaction = null;
int rowCount = dataTable.Rows.Count;
try
{
transaction = connection.BeginTransaction();
command.Transaction = transaction;
for (int i = 0; i < rowCount; i++)
{
DataRow row = dataTable.Rows[i];
command.Parameters["@column1"].Value = row["column1"].ToString();
command.Parameters["@column2"].Value = row["column2"].ToString();
command.Parameters["@column3"].Value = row["column3"].ToString();
command.ExecuteNonQuery();
float progress = ((float)i / (float)rowCount) * 100;
lblProgress.Text = string.Format("导入进度:{0:F2}%", progress);
Application.DoEvents();
}
transaction.Commit();
MessageBox.Show("导入成功!");
}
catch (Exception ex)
{
transaction.Rollback();
MessageBox.Show("导入失败:" + ex.Message);
}
}
}
```
10. 最后,测试您的应用程序并检查是否成功导入了 Excel 数据到 MySQL 数据库中。
希望这些步骤可以帮助您实现目录导入工具的功能。
阅读全文