c# 把一个excel表中的多个sheet表导入到数据库中的多个表
时间: 2024-03-11 22:48:14 浏览: 80
可以通过以下步骤来实现将一个 Excel 文件中的多个 sheet 表导入到数据库中的多个表:
1. 使用 C# 的 `OleDbConnection` 类连接 Excel 文件,获取数据表列表。
```csharp
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=path/to/excel/file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES';";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
DataTable sheetTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
foreach (DataRow row in sheetTable.Rows)
{
string sheetName = (string)row["TABLE_NAME"];
// ...
}
}
```
2. 遍历数据表列表,使用 `OleDbDataAdapter` 和 `DataSet` 类获取每个 sheet 表的数据,并将数据插入到数据库中的对应表中。
```csharp
foreach (DataRow row in sheetTable.Rows)
{
string sheetName = (string)row["TABLE_NAME"];
string selectCommandText = "SELECT * FROM [" + sheetName + "]";
using (OleDbDataAdapter adapter = new OleDbDataAdapter(selectCommandText, connection))
{
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
DataTable table = dataSet.Tables[0];
// 将 table 中的数据插入到数据库中的对应表中
// ...
}
}
```
3. 在插入数据时,需要先创建对应的表结构。可以通过 `OleDbDataReader` 类获取每个 sheet 表的列信息,并根据列信息创建数据库表。
```csharp
string selectCommandText = "SELECT * FROM [" + sheetName + "]";
using (OleDbCommand command = new OleDbCommand(selectCommandText, connection))
using (OleDbDataReader reader = command.ExecuteReader(CommandBehavior.KeyInfo))
{
DataTable schemaTable = reader.GetSchemaTable();
// 根据 schemaTable 中的信息创建数据库表
// ...
}
```
4. 插入数据时,可以使用 ADO.NET 中的 `SqlCommand` 类和 `SqlBulkCopy` 类实现高效的批量插入。
```csharp
string insertCommandText = "INSERT INTO TableName (Column1, Column2, Column3) VALUES (@Column1, @Column2, @Column3)";
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
using (SqlCommand sqlCommand = new SqlCommand(insertCommandText, sqlConnection))
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnection))
{
sqlConnection.Open();
// 设置 sqlCommand 的参数
sqlCommand.Parameters.AddWithValue("@Column1", value1);
sqlCommand.Parameters.AddWithValue("@Column2", value2);
sqlCommand.Parameters.AddWithValue("@Column3", value3);
// 设置 bulkCopy 的 DestinationTableName 和 ColumnMappings
bulkCopy.DestinationTableName = "TableName";
bulkCopy.ColumnMappings.Add("Column1", "Column1");
bulkCopy.ColumnMappings.Add("Column2", "Column2");
bulkCopy.ColumnMappings.Add("Column3", "Column3");
bulkCopy.WriteToServer(table);
}
```
以上是将一个 Excel 文件中的多个 sheet 表导入到数据库中的多个表的大致思路,具体实现还需要根据实际情况进行调整。
阅读全文