高效的导入数据

protected void Button1_Click(object sender, EventArgs e)

        {
            if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
            {
                Response.Write("<script>alert('请您选择Excel文件')</script> ");
                return;//当无文件时,返回
            }
            string IsXls = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
            if (IsXls != ".xlsx")
            {
                Response.Write("<script>alert('只可以选择Excel文件')</script>");
                return;//当选择的不是Excel文件时,返回
            }
            string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
            string savePath = Server.MapPath(("/upfiles\\") + filename);//Server.MapPath 获得虚拟服务器相对路径
            FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上
            DataSet ds = ExcelSqlConnection(savePath, filename);           //调用自定义方法
            DataRow[] dr = ds.Tables[0].Select();            //定义一个DataRow数组
            int rowsnum = ds.Tables[0].Rows.Count;
            if (rowsnum == 0)
            {
                Response.Write("<script>alert('Excel表为空表,无数据!')</script>");   //当Excel表为空时,对用户进行提示
            }
            else
            {
                //for (int i = 0; i < dr.Length; i++)
                //{
                    //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面
                    //string title = dr[i]["姓名"].ToString();
                    //string linkurl = dr[i]["工号"].ToString();
                    //string categoryname = dr[i]["性别"].ToString();
                    //string customername = dr[i]["出生日期"].ToString();




                    //string str = ConfigurationManager.AppSettings["ConnectionString"];       
                    //声明数据库连接
                SqlConnection conn = new SqlConnection("连接字符串");


                    conn.Open();
                    //声明SqlBulkCopy ,using释放非托管资源
                    using (SqlBulkCopy sqlBC = new SqlBulkCopy(conn))
                    {
                        //一次批量的插入的数据量
                        sqlBC.BatchSize = 1000;
                        //超时之前操作完成所允许的秒数,如果超时则事务不会提交 ,数据将回滚,所有已复制的行都会从目标表中移除
                        sqlBC.BulkCopyTimeout = 60;


                        //設定 NotifyAfter 属性,以便在每插入10000 条数据时,呼叫相应事件。  
                        sqlBC.NotifyAfter = 10000;
                        sqlBC.SqlRowsCopied += new SqlRowsCopiedEventHandler(OnSqlRowsCopied);


                        //设置要批量写入的表
                        sqlBC.DestinationTableName = "location";
                        //locationID Subwaystation Subwaydistance Busstation Busline SurroundingEstate state EditUser EditDate


                        //自定义的datatable和数据库的字段进行对应 
                        sqlBC.ColumnMappings.Add("城市", "CityId");
                        sqlBC.ColumnMappings.Add("行政区", "Area");
                        sqlBC.ColumnMappings.Add("楼盘名称", "Estate");
                        sqlBC.ColumnMappings.Add("东面临", "Eastfacing");
                        sqlBC.ColumnMappings.Add("南面临", "Southfacing");
                        sqlBC.ColumnMappings.Add("西面临", "Westfacing");
                        sqlBC.ColumnMappings.Add("北面临", "Northfacing");
                        sqlBC.ColumnMappings.Add("超市", "Supermarket");
                        sqlBC.ColumnMappings.Add("肉菜市场", "market");
                        sqlBC.ColumnMappings.Add("医院", "Hospital");
                        sqlBC.ColumnMappings.Add("银行", "Bank");
                        sqlBC.ColumnMappings.Add("学校", "School");
                        sqlBC.ColumnMappings.Add("公园", "Park");
                        sqlBC.ColumnMappings.Add("地铁线路", "metro");
                        sqlBC.ColumnMappings.Add("地铁站点", "Subwaystation");
                        sqlBC.ColumnMappings.Add("到地铁站时间", "Subwaydistance");
                        sqlBC.ColumnMappings.Add("公交车站", "Busstation");
                        sqlBC.ColumnMappings.Add("公交线路", "Busline");
                        sqlBC.ColumnMappings.Add("周边楼盘", "SurroundingEstate");
                       


                        //sqlBC.ColumnMappings.Add("姓名", "name");
                        //sqlBC.ColumnMappings.Add("年龄", "age");
                        sqlBC.WriteToServer(dr);
                        //Response.Write("<script>alert('导入内容:" + ex.Message + "')</script>");
                    //}
                        //Response.Write("<script>alert('Excle表导入成功!');</script>");
                        Response.Write("<scpript>alert('Excle表导入" + rowsnum + "!';</script>");
                }
               
            }
        }


        public static DataSet ExcelSqlConnection(string filepath, string tableName)
        {
            //string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";


            string strCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", filepath);
            OleDbConnection ExcelConn = new OleDbConnection(strCon);
            try
            {
                //string strCom = string.Format("SELECT * FROM [Sheet1$]");
                string strCom = string.Format("SELECT * FROM [人工整理$]");
                ExcelConn.Open();
                OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, ExcelConn);
                DataSet ds = new DataSet();
                myCommand.Fill(ds, "[" + tableName + "$]");
                ExcelConn.Close();
                return ds;
            }
            catch
            {
                ExcelConn.Close();
                return null;
            }
        }

猜你喜欢

转载自blog.csdn.net/chenchon1/article/details/80064266