Excel数据导入SQL Server

基本有2种方案,都是无需安装Office的方案

Ole DB读取 + BulkCopy

获取Excel各个SheetName

//连接串
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn); 

conn.Open(); 

//返回Excel的架构,包括各个sheet表的名称,类型,创建时间和修改时间等  
DataTable dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" }); 

//包含excel中表名的字符串数组
string[] strTableNames = new string[dtSheetName.Rows.Count];
for (int k = 0; k < dtSheetName.Rows.Count; k++)
{
    strTableNames[k] = dtSheetName.Rows[k]["TABLE_NAME"].ToString();
}
return strTableNames;

NPOI读取 + BulkCopy

获取Excel各个SheetName

using (FileStream fs = File.OpenRead(txtPath.Text)) //打开myxls.xls文件
{
    HSSFWorkbook wk = new HSSFWorkbook(fs);
    string[] strTableNames = new string[wk.NumberOfSheets];
    for (int i = 0; i < wk.NumberOfSheets; i++) //NumberOfSheets是myxls.xls中总共的表数
    {
        strTableNames[i] = wk.GetSheetAt(i).SheetName;
    }
    return strTableNames;
}

SQLBulkCopy数据写入

using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
    //bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);
    bcp.BatchSize = 100;//每次传输的行数
    bcp.NotifyAfter = 100;//进度提示的行数
    bcp.DestinationTableName = sheetName;//目标表
    bcp.WriteToServer(ds.Tables[0]);
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。