码迷,mamicode.com
首页 > 数据库 > 详细

Excel数据导入SQL Server

时间:2015-02-04 00:21:19      阅读:291      评论:0      收藏:0      [点我收藏+]

标签:

基本有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]);
}

Excel数据导入SQL Server

标签:

原文地址:http://www.cnblogs.com/niusys/p/4271282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!