• 热门专题

Excel批量导入数据库

作者:郗晓勇的博客  发布日期:2011-09-05 11:17:01
  • 在上个系统中需要用到Excel整体导入的功能整体的核心思路如下:
    1、 首先将需要导入的Excel上传至服务器
    2、 为了避免文件名重复,重命名上传的Excel文件
    3、 将上传的Excel文件读入DataTable中
    4、 将DataTable读入数据库中
    实现起来还是比较简单的,核心代码如下:
    界面需要一个FileUpload控件和一个Button

    界面代码:

    using System;  
    using System.Data;   
      
    namespace WebApplication1  
    {  
        public partial class WebForm1 : System.Web.UI.Page  
        {  
            protected void Page_Load(object sender, EventArgs e)  
            {  
       
      
            }   
            protected void btnUpload_Click(object sender, EventArgs e)  
            {  
                string path = Server.MapPath("~/upload/");  
                //根据日期时间重命名文件  
                string fileName = DateTime.Now.ToString("yyyymmddhhMMss") + FileUpload1.FileName;  
                ExcelManager em = new ExcelManager(path + fileName);  
      
                FileUpload1.PostedFile.SaveAs(path + fileName);//另存文件  
                DataTable dtTable = em.ExecuteGetDataTable(fileName);  
                em.WriteToDB("studentInfo", dtTable);//导入数据库  
            }  
        }  
    }  
    

    Excel导入数据库控制类
    其中需要注意的是
    1、连接Excel字符串中HDR的值表示是否有表头,YSE表示导入的EXCEL包括表头,NO反之。
    2、IMEX的值有三个
    当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 只能用来做“写入”用途。
    当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 只能用来做“读取”用途。
    当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 可同时支持“读取”与“写入”用途。
    这里是EXCEL导入,对于EXCEL是读取操作,即IMEX=0。

    using System.Data.OleDb;  
    using System.Data;  
    namespace WebApplication1  
    {  
      
        /// <summary>  
        /// excel导入数据库控制类  
        /// </summary>  
        public class ExcelManager  
        {  
      
            //定义连接  
            OleDbConnection oledbConn = null;  
            /// <summary>  
            /// 构造函数,初始化连接,给连接赋上地址  
            /// </summary>  
            /// <param name="fileUrl"></param>  
            public ExcelManager(string fileUrl)  
            {  
      
                string strConn = "Provider=Microsoft.Jet.Oledb.4.0;" + "data source=" + fileUrl + ";Extended Properties='Excel 8.0; HDR=NO; IMEX=1'";  
                oledbConn = new OleDbConnection(strConn);  
            }  
      
            /// <summary>  
            /// 连接Excel表的方法  
            /// </summary>  
            /// <returns></returns>  
            public OleDbConnection GetCon()  
            {  
                if (oledbConn.State == ConnectionState.Closed)  
                {  
                    oledbConn.Open();  
                }  
                return oledbConn;  
            }  
      
            /// <summary>  
            /// 将上传的Excel数据导入到DataTable中  
            /// </summary>  
            /// <param name="fileName"></param>  
            /// <returns></returns>  
            public DataTable ExecuteGetDataTable(string fileName)  
            {  
      
                DataSet ds = new DataSet();  
                OleDbDataAdapter oledbda = new OleDbDataAdapter("select * from[Sheet1$]", GetCon());  
                oledbda.Fill(ds, fileName);  
                //获取数据集中的第一个表  
                return ds.Tables[0];  
            }  
      
            /// <summary>  
            /// 将加工好的DataTable导入到数据库中  
            /// </summary>  
            /// <param name="destinationTableName">数据库中的目标表名称</param>  
            /// <param name="sourceTable">源表</param>  
            /// <returns></returns>  
            public bool WriteToDB(string destinationTableName, DataTable sourceTable)  
            {  
      
                bool flag = false;          
                SqlBulkCopyHelper bulkCopyHelper = new SqlBulkCopyHelper();  
                if (bulkCopyHelper.ExecuteBulkCopy(destinationTableName, sourceTable))  
                {  
                    flag = true;  
                }  
                else  
                {  
                    flag = false;  
                }  
                return flag;  
            }  
      
            /// <summary>  
            /// 上传文件到服务器的UpLoad文件夹  
            /// </summary>  
            /// <param name="fileName"></param>  
            /// <returns></returns>  
            public bool IsExcel(string fileName)  
            {  
                bool flag = false;  
                //获得该文件的扩展名  
                string fileExtension = System.IO.Path.GetExtension(fileName).ToLower();  
                //检查扩展名是否为xls  
                if (fileExtension.Equals(".xls"))  
                {  
                    flag = true;  
                }  
                else  
                {  
                    flag = false;  
                }  
                return flag;  
            }  
        }  
    }  

    批量导入数据助手类

    using System;  
    using System.Data;  
    using System.Configuration;  
    using System.Data.SqlClient;   
      
        /// <summary>  
        /// 批量导入数据助手类  
        /// </summary>  
        public  class SqlBulkCopyHelper  
        {  
      
            //获取配置文件中的数据库连接字符串  
            private string strCon = ConfigurationManager.ConnectionStrings["connBasicInfo"].ConnectionString;  
            private SqlConnection sqlCon;  
            /// <summary>  
            /// 构造函数,初始化连接字符串  
            /// </summary>  
            public SqlBulkCopyHelper()  
            {  
                sqlCon = new SqlConnection(strCon);  
            }  
      
            /// <summary>  
            /// 打开数据库连接  
            /// </summary>  
            /// <returns></returns>  
            public SqlConnection GetCon()  
            {  
                if (sqlCon .State ==ConnectionState .Closed )  
                {  
                    sqlCon.Open();  
                }  
                return sqlCon;  
            }  
      
            /// <summary>  
            /// 将源数据表中的数据批量导入到目标表  
            /// </summary>  
            /// <param name="targetTableName">目标表</param>  
            /// <param name="sourceTable">源表</param>  
            /// <returns></returns>  
            public bool ExecuteBulkCopy(string targetTableName, DataTable sourceTable)  
            {  
                bool flag = false;  
                //调用批量拷贝类  
                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(GetCon()))  
                {  
                    bulkCopy.DestinationTableName = targetTableName;  
                    try  
                    {  
                        //将源表中的数据批量拷贝到目标表  
                        bulkCopy.WriteToServer(sourceTable);  
                        flag = true;  
                    }  
                    catch (Exception)  
                    {  
                         flag = false;  
                    }  
                    return flag;  
                }  
            }  
        }  
About IT165 - 广告服务 - 隐私声明 - 版权申明 - 免责条款 - 网站地图 - 网友投稿 - 联系方式
本站内容来自于互联网,仅供用于网络技术学习,学习中请遵循相关法律法规