У меня есть один файл Excel, который содержит несколько листов. Каждое имя листа совпадает с именем таблицы в SQL Server. Мне нужно вставить данные этих листов Excel в соответствующие таблицы в базе данных.
В базе данных SQL-сервера имеется 13 вкладок и 13 таблиц.
Я могу вставить данные одного листа в одну таблицу с приведенным ниже кодом.
String strConnection = "Data Source=.;Initial Catalog=<>;Integrated Security=True";
String excelConnString = String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0\"", filePath);
// Create Connection to Excel work book
OleDbConnection conn = new OleDbConnection(excelConnString);
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataTable dt = new DataTable();
conn.Open();
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = dtSheet.Rows[0]["table_name"].ToString();
cmd.CommandText = "select * from [" + sheetName + "]";
da.SelectCommand = cmd;
da.Fill(dt);
using (OleDbDataReader dReader = cmd.ExecuteReader())
{
using(SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
{
//Give your Destination table name
sqlBulk.DestinationTableName = "TABLE NAME IN SQL";
sqlBulk.WriteToServer(dReader);
conn.Close();
}
}
Как я могу вставить данные со всех листов?
Следующее должно сделать это - вам просто нужно выполнить итерацию по каждой строке таблицы таблиц:
...
DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// iterate each sheet
foreach (System.Data.DataRow sheet in dtSheet.Rows)
{
string sheetName = sheet["table_name"].ToString();
cmd.CommandText = "select * from [" + sheetName + "]";
da.SelectCommand = cmd;
da.Fill(dt);
using (OleDbDataReader dReader = cmd.ExecuteReader())
{
using (SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection))
{
// Give your Destination table name. Table name is sheet name minus any $
sqlBulk.DestinationTableName = sheetName.Replace("$", "");
sqlBulk.WriteToServer(dReader);
conn.Close();
}
}
}
}