上传Excel并高效将EXCEL导入数据库

本文详细介绍了如何通过C#实现从客户端上传Excel文件至服务器,接着解析Excel文件内容到DataSet,并最终将这些数据高效地批量导入到SQL Server数据库中的全过程。

上传EXCEL文件到服务器

        if (FileUpload_excel.HasFile)
        {
            string excelFileName = FileUpload_excel.FileName;
            string fileExt = System.IO.Path.GetExtension(FileUpload_excel.FileName).ToLower();

            if (fileExt==".xls" || fileExt==".xlsx")
            {
                try
                {
                    string FileNewName = "Gtcs"+DateTime.Now.ToString("yyyyMMddHHmmssffff") + fileExt;
                    string FilePath = HttpContext.Current.Server.MapPath("./UploadFiles/");
                    this.FileUpload_excel.SaveAs(FilePath + FileNewName);
                    string FullPathName = FilePath + FileNewName;

                }
                catch (Exception ext)
                {
                    
                }
            }

        }

 

根据EXCEL文件路径读取内容到DataSet

   //根据路径读取Excel到DataSet
   private DataSet ReadExcelFile(string FullPathName)
    {
        string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + FullPathName + ";Extended Properties=\"Excel 8.0; HDR=No; IMEX=1;\"";
        OleDbConnection conn = new OleDbConnection(strCon);
        string sql = "select F1 ,F2 ,F3 from [Sheet1$]";
        conn.Open();
        OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);
        DataSet ds = new DataSet();
        myCommand.Fill(ds, "[Sheet1$]");
        conn.Close();
        return ds;
    }

 

这就是重点了,高效将DataSet的内容写入到数据库中

                using (System.Data.SqlClient.SqlBulkCopy SQLBC = new System.Data.SqlClient.SqlBulkCopy(connStr))
                {
                    SQLBC.ColumnMappings.Add("F1", "db_F1");
                    SQLBC.ColumnMappings.Add("F2", "db_F2");
                    SQLBC.ColumnMappings.Add("F3", "db_F3");
                    SQLBC.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(SQLBC_SQLRowsCopide);
                    SQLBC.BatchSize = 10000;//每次传输的行数
                    SQLBC.NotifyAfter = 10000;//生成通知的行数
                    SQLBC.DestinationTableName = "excel_gtcsTemp";//目标表名
                    SQLBC.WriteToServer(ds.Tables[0]);
                }

 

 

    private void SQLBC_SQLRowsCopide(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)
    {
        //Response.Write("Rows:" + e.RowsCopied.ToString() + "<br>"); 
      
    }

 

 

转载于:https://www.cnblogs.com/taobox/archive/2012/06/13/2548139.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值