时间: 2017/10/27 22:42:16
准备一下,近段时间,需要把Excel的数据导入数据库中。
引用命名空间:
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
你可以写一个方法,是去读取Excel文档的方法,返回DataSet数据集:
private DataSet ImportExcelToDataSet(string virtualPath, string sqlQueryStatement)
{
string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
OleDbConnection dc = new OleDbConnection(excelConnectionString);
OleDbDataAdapter da = new OleDbDataAdapter(sqlQueryStatement, dc);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
导入数据库,在数据库中,需要创建一个表来存储Excel导入来的数据:
接下来,你可以使作SqlBulkCopy的方法进行复制数据库:
try
{
string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
using (SqlConnection sqlConn = new SqlConnection(cs))
{
string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
string virtualPath = "~/App_Data/Book1.xlsx";
DataSet ds = ImportExcelToDataSet(virtualPath, sqlQueryStatement);
DataTable dt = ds.Tables[0];
sqlConn.Open();
using (SqlBulkCopy sqlbc = new SqlBulkCopy(sqlConn))
{
sqlbc.DestinationTableName = "BOM";
sqlbc.ColumnMappings.Add("Material", "Material");
sqlbc.ColumnMappings.Add("Plnt", "Plnt");
sqlbc.ColumnMappings.Add("Level", "Level");
sqlbc.ColumnMappings.Add("Item", "Item");
sqlbc.ColumnMappings.Add("Component", "Component");
sqlbc.ColumnMappings.Add("Object description", "Object description");
sqlbc.WriteToServer(dt);
Response.Write("数据导入成功!");
}
}
}
catch (Exception ex)
{
throw ex;
}
下面内容于2017-10-17 14:38分添加:
使用sqlDataReader来导入,没有做过多的测试,速度与DataSet快不了多少:
private OleDbDataReader ImportExcelToDataReader(string virtualPath, string sqlQueryStatement)
{
string excelConnectionString = DB.ExcelConnectionString(Server.MapPath(virtualPath));
OleDbConnection oleConn = new OleDbConnection(excelConnectionString);
OleDbCommand oleComm = new OleDbCommand(sqlQueryStatement, oleConn);
oleConn.Open();
return oleComm.ExecuteReader();
}
string sqlQueryStatement = "SELECT [Material],[Plnt],[Level],[Item],[Component],[Object description] FROM [Sheet1$]";
string virtualPath = "~/App_Data/Book1.xlsx";
string cs = ConfigurationManager.ConnectionStrings["InsusSqlConnectionString"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(cs);
OleDbDataReader reader = ImportExcelToDataReader(virtualPath, sqlQueryStatement);
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConn))
{
bulkCopy.DestinationTableName = "BOM";
try
{
sqlConn.Open();
bulkCopy.WriteToServer(reader);
Response.Write("数据导入成功。");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
sqlConn.Close();
}
}