Excel批量导入数据库

在上个系统中需要用到Excel整体导入的功能整体的核心思路如下:

1、 首先将需要导入的Excel上传至服务器

2、 为了避免文件名重复,重命名上传的Excel文件

3、 将上传的Excel文件读入DataTable

4、 DataTable读入数据库中

实现起来还是比较简单的,核心代码如下:

界面需要一个FileUpload控件和一个Button


界面代码:

  1. <span style="font-size:16px;">using System;  
  2. using System.Data;   
  3.   
  4. namespace WebApplication1  
  5. {  
  6.     public partial class WebForm1 : System.Web.UI.Page  
  7.     {  
  8.         protected void Page_Load(object sender, EventArgs e)  
  9.         {  
  10.    
  11.   
  12.         }   
  13.         protected void btnUpload_Click(object sender, EventArgs e)  
  14.         {  
  15.             string path = Server.MapPath("~/upload/");  
  16.             //根据日期时间重命名文件  
  17.             string fileName = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;  
  18.             ExcelManager em = new ExcelManager(path + fileName);  
  19.   
  20.             FileUpload1.PostedFile.SaveAs(path + fileName);//另存文件  
  21.             DataTable dtTable = em.ExecuteGetDataTable(fileName);  
  22.             em.WriteToDB("studentInfo", dtTable);//导入数据库  
  23.         }  
  24.     }  
  25. }  
  26. </span>  


Excel导入数据库控制类

其中需要注意的是

1、连接Excel字符串中HDR的值表示是否有表头,YSE表示导入的EXCEL包括表头,NO反之。

2、IMEX的值有三个

当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 只能用来做“写入”用途。
当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 只能用来做“读取”用途。
当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 可同时支持“读取”与“写入”用途。

这里是EXCEL导入,对于EXCEL是读取操作,即IMEX=0。

  1. <span style="font-size:16px;">using System.Data.OleDb;  
  2. using System.Data;  
  3. namespace WebApplication1  
  4. {  
  5.   
  6.     /// <summary>  
  7.     /// excel导入数据库控制类  
  8.     /// </summary>  
  9.     public class ExcelManager  
  10.     {  
  11.   
  12.         //定义连接  
  13.         OleDbConnection oledbConn = null;  
  14.         /// <summary>  
  15.         /// 构造函数,初始化连接,给连接赋上地址  
  16.         /// </summary>  
  17.         /// <param name="fileUrl"></param>  
  18.         public ExcelManager(string fileUrl)  
  19.         {  
  20.   
  21.             string strConn = "Provider=Microsoft.Jet.Oledb.4.0;" + "data source=" + fileUrl + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'";  
  22.             oledbConn = new OleDbConnection(strConn);  
  23.         }  
  24.   
  25.         /// <summary>  
  26.         /// 连接Excel表的方法  
  27.         /// </summary>  
  28.         /// <returns></returns>  
  29.         public OleDbConnection GetCon()  
  30.         {  
  31.             if (oledbConn.State == ConnectionState.Closed)  
  32.             {  
  33.                 oledbConn.Open();  
  34.             }  
  35.             return oledbConn;  
  36.         }  
  37.   
  38.         /// <summary>  
  39.         /// 将上传的Excel数据导入到DataTable中  
  40.         /// </summary>  
  41.         /// <param name="fileName"></param>  
  42.         /// <returns></returns>  
  43.         public DataTable ExecuteGetDataTable(string fileName)  
  44.         {  
  45.   
  46.             DataSet ds = new DataSet();  
  47.             OleDbDataAdapter oledbda = new OleDbDataAdapter("select * from[Sheet1$]", GetCon());  
  48.             oledbda.Fill(ds, fileName);  
  49.             //获取数据集中的第一个表  
  50.             return ds.Tables[0];  
  51.         }  
  52.   
  53.         /// <summary>  
  54.         /// 将加工好的DataTable导入到数据库中  
  55.         /// </summary>  
  56.         /// <param name="destinationTableName">数据库中的目标表名称</param>  
  57.         /// <param name="sourceTable">源表</param>  
  58.         /// <returns></returns>  
  59.         public bool WriteToDB(string destinationTableName, DataTable sourceTable)  
  60.         {  
  61.   
  62.             bool flag = false;          
  63.             SqlBulkCopyHelper bulkCopyHelper = new SqlBulkCopyHelper();  
  64.             if (bulkCopyHelper.ExecuteBulkCopy(destinationTableName, sourceTable))  
  65.             {  
  66.                 flag = true;  
  67.             }  
  68.             else  
  69.             {  
  70.                 flag = false;  
  71.             }  
  72.             return flag;  
  73.         }  
  74.   
  75.         /// <summary>  
  76.         /// 上传文件到服务器的UpLoad文件夹  
  77.         /// </summary>  
  78.         /// <param name="fileName"></param>  
  79.         /// <returns></returns>  
  80.         public bool IsExcel(string fileName)  
  81.         {  
  82.             bool flag = false;  
  83.             //获得该文件的扩展名  
  84.             string fileExtension = System.IO.Path.GetExtension(fileName).ToLower();  
  85.             //检查扩展名是否为xls  
  86.             if (fileExtension.Equals(".xls"))  
  87.             {  
  88.                 flag = true;  
  89.             }  
  90.             else  
  91.             {  
  92.                 flag = false;  
  93.             }  
  94.             return flag;  
  95.         }  
  96.     }  
  97. }  
  98. </span>  


批量导入数据助手类

  1. <span style="font-size:16px;">using System;  
  2. using System.Data;  
  3. using System.Configuration;  
  4. using System.Data.SqlClient;   
  5.   
  6.     /// <summary>  
  7.     /// 批量导入数据助手类  
  8.     /// </summary>  
  9.     public  class SqlBulkCopyHelper  
  10.     {  
  11.   
  12.         //获取配置文件中的数据库连接字符串  
  13.         private string strCon = ConfigurationManager.ConnectionStrings["connBasicInfo"].ConnectionString;  
  14.         private SqlConnection sqlCon;  
  15.         /// <summary>  
  16.         /// 构造函数,初始化连接字符串  
  17.         /// </summary>  
  18.         public SqlBulkCopyHelper()  
  19.         {  
  20.             sqlCon = new SqlConnection(strCon);  
  21.         }  
  22.   
  23.         /// <summary>  
  24.         /// 打开数据库连接  
  25.         /// </summary>  
  26.         /// <returns></returns>  
  27.         public SqlConnection GetCon()  
  28.         {  
  29.             if (sqlCon .State ==ConnectionState .Closed )  
  30.             {  
  31.                 sqlCon.Open();  
  32.             }  
  33.             return sqlCon;  
  34.         }  
  35.   
  36.         /// <summary>  
  37.         /// 将源数据表中的数据批量导入到目标表  
  38.         /// </summary>  
  39.         /// <param name="targetTableName">目标表</param>  
  40.         /// <param name="sourceTable">源表</param>  
  41.         /// <returns></returns>  
  42.         public bool ExecuteBulkCopy(string targetTableName, DataTable sourceTable)  
  43.         {  
  44.             bool flag = false;  
  45.             //调用批量拷贝类  
  46.             using (SqlBulkCopy bulkCopy = new SqlBulkCopy(GetCon()))  
  47.             {  
  48.                 bulkCopy.DestinationTableName = targetTableName;  
  49.                 try  
  50.                 {  
  51.                     //将源表中的数据批量拷贝到目标表  
  52.                     bulkCopy.WriteToServer(sourceTable);  
  53.                     flag = true;  
  54.                 }  
  55.                 catch (Exception)  
  56.                 {  
  57.                      flag = false;  
  58.                 }  
  59.                 return flag;  
  60.             }  
  61.         }  
  62.     }  
  63. </span>  

你可能感兴趣的:(Excel)