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

利用OLEDB+SqlClient实现EXCEL批量导入数据

时间:2014-08-02 23:10:04      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   文件   数据   for   

以下是几个自己写的类

        /// <summary>
        /// 取得Excel对象
        /// </summary>
        /// <param name="strConn">OLEDB连接字符串</param>
        /// <param name="sql">SQL语句</param>
        /// <returns></returns>
        public static DataTable GetExecuteDataTable(string strConn, string sql)
        {
            DataTable dt = new DataTable();
            using (OleDbConnection conn = new OleDbConnection(strConn))
            {
                using (OleDbDataAdapter oda = new OleDbDataAdapter(sql, conn))
                {
                    oda.Fill(dt);
                    return dt;
                }
            }
        }

        /// <summary>
        /// 导入数据
        /// </summary>
        /// <param name="sql">sql语句</param>
        /// <param name="mydelegate">执行插入的方法</param>
        /// <returns>返回受影响的行数</returns>
        public static int Introduction(string sql, Func<SqlConnection,int> mydelegate)
        {
            int rownumber = 0;//受影响的行数
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                rownumber = mydelegate(conn);
            }
            return rownumber;
        }

        /// <summary>
        /// 生成插入语句
        /// </summary>
        /// <param name="table"></param>
        /// <param name="column"></param>
        /// <returns></returns>
        public static string CreateInsertSQL(string table, params string[] column)
        {
            StringBuilder sb = new StringBuilder();//拼接字段
            StringBuilder sb1 = new StringBuilder();//拼接参数字段
            foreach (string item in column)
            {
                sb.Append(string.Format("{0},", item));
                sb1.Append(string.Format("@{0},", item));
            }
            return string.Format("INSERT INTO {0} ({1}) VALUES ({2})", table, sb.ToString().TrimEnd(,), sb1.ToString().TrimEnd(,));
        }
       string excelConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0;", excelpath);
            string excelSql = string.Format("SELECT [网点编号],[网点名称],[派工单位],[所属区域],[变更信息] FROM [table$]");
            string sql = Caihuashun_SQLHelper.CreateInsertSQL("[Caihuashun_Units_T]", "wdbh", "wdmc", "pgdw", "ssqy", "biangeng");
            DataTable exceldt = Caihuashun_SQLHelper.GetExecuteDataTable(excelConn, excelSql);
            Func<SqlConnection, int> myDelegate = (conn) =>
            {
                int i = 0;
                foreach (Caihuashun_Units_T item in DtToList(exceldt))
                {
                    using (SqlCommand cmd = new SqlCommand(sql, conn))
                    {
                        SqlParameter[] sp = {
                                                new SqlParameter("@wdbh",item.wdbh),
                                                new SqlParameter("@wdmc",item.wdmc),
                                                new SqlParameter("@pgdw",item.pgdw),
                                                new SqlParameter("@ssqy",item.ssqy),
                                                new SqlParameter("@biangeng",item.biangeng)
                                            };
                        cmd.Parameters.AddRange(sp);
                        i += cmd.ExecuteNonQuery();
                    }
                }
                return i;
            };
            return Caihuashun_SQLHelper.Introduction(sql, myDelegate);
try
            {
                OpenFileDialog open = new OpenFileDialog();
                open.Filter = "Execl files (*.xls)|*.xls";//打开文件的类型
                open.Title = "选择要导入的文件";
                open.FilterIndex = 0;//文件类型默认第一个
                open.RestoreDirectory = true;//上一次选择的目录
                if (open.ShowDialog() == DialogResult.OK)
                {
                    function.MboxSuccess(string.Format("成功导入{0}条数据!", bll.Introduction(open.FileName)));
                }
            }
            catch (Exception ex)
            {
                function.MboxError(ex.Message);
            }

 

利用OLEDB+SqlClient实现EXCEL批量导入数据,布布扣,bubuko.com

利用OLEDB+SqlClient实现EXCEL批量导入数据

标签:style   blog   color   os   io   文件   数据   for   

原文地址:http://www.cnblogs.com/caihuashun/p/3887494.html

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