ASP.NET实现excel导入数据库

1:说明:此方法建立在已经实现数据库的插入功能上

2:注解:2.1:新建一个文件夹存放excel文件(见example.aspx.cs的GetExcel()方法)

               2.2:控件


               2.3:excel表格式(excel表头与数据库表字段对应)

                        

                2.4:修改数据库插入方法(见example.aspx.cs的InsetData()方法)

3:步骤:1:前台控件:

                  1.1:FileUpload;

                  1.2:Button;

              2:后台响应程序

                  2.1:将excel上传到服务器;

                  2.2:Excel数据导入System.Data.DataTable;

                  2.3:从System.Data.DataTable导入数据到数据库

4:代码:

4.1:example.aspx
<div style="margin-top: 0px; margin-left: 0px;">
    <div style="height: 38px">
    <asp:Label ID="Label1" runat="server" Text="文件*:" Width="60px"></asp:Label>
    <asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="450px" />
    <asp:Button ID="btnImport" runat="server" Text="一键上传" Width="80px" Height="20px" OnClick="btnImport_Click" />
</div>
4.2:example.aspx.cs

//上传excel数据到数据库------------------------------------------>
        protected void btnImport_Click(object sender, EventArgs e) {
            //1:将excel上传到服务器;
            string fileUrl = this.GetExcel();
            //2:将excel数据导入数据库
            this.InsetData(this.GetExcelDatatable(fileUrl));
        }
        //1:客户端上传excel到服务器
        //@return:fileUrl  服务器文件路径
        protected string GetExcel(){
            string fileUrl = "";
            #region 文件上传
            try
            {
                //全名  
                string excelFile = this.fulImport.PostedFile.FileName;
                //获取文件名(不包括扩展名)  
                string fileName = Path.GetFileNameWithoutExtension(fulImport.PostedFile.FileName);
                //扩展名  
                string extentionName = excelFile.Substring(excelFile.LastIndexOf(".") + 1);
                if (fileName == "" || fileName == null)
                {
                    Response.Write("<script>alert('请先选择Excel文件!')</script>");
                    return null;
                }
                if (extentionName != "xls" && extentionName != "xlsx")
                {
                    Response.Write("<script>alert('您上传的不是Excel文件!')</script>");
                    return null;
                }
                //浏览器安全性限制 无法直接获取客户端文件的真实路径,将文件上传到服务器端 然后获取文件源路径  
                #region 设置上传路径将文件保存到服务器
                string dateTime = DateTime.Now.Date.ToString("yyyyMMdd");
                string time = DateTime.Now.ToShortTimeString().Replace(":", "");
                string newFileName = dateTime + time + DateTime.Now.Millisecond.ToString() + ".xls"; ;
                //自己创建的文件夹 位置随意 合理即可  
                fileUrl = Server.MapPath("..\\excel") + "\\" + newFileName;
                this.fulImport.PostedFile.SaveAs(fileUrl);
                //Response.Write("<script>alert('已经上传到服务器文件夹')</script>");
                return fileUrl;
                #endregion

            }
            catch
            {
                Response.Write("<script>alert('数据上传失败,请重新导入')</script>");
                return null;
            }
            #endregion

        }
        //2:Excel数据导入Datable
        //@param fileUrl 服务器文件路径
        //@return System.Data.DataTable dt 
        protected System.Data.DataTable GetExcelDatatable(string fileUrl)
        {
            //office2007之前 仅支持.xls
            //const string cmdText = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1';";
            //支持.xls和.xlsx,即包括office2010等版本的   HDR=Yes代表第一行是标题,不是数据;
            const string cmdText = "Provider=Microsoft.Ace.OleDb.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";

            System.Data.DataTable dt = null;
            //建立连接
            OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));

            //打开连接
            if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }


            System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

            //获取Excel的第一个Sheet名称
            string sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString().Trim();

            //查询sheet中的数据
            string strSql = "select * from [" + sheetName + "]";
            OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
            DataSet ds = new DataSet();
            da.Fill(ds);
            dt = ds.Tables[0];

            return dt;


        }
        //3:从System.Data.DataTable导入数据到数据库
        //@param System.Data.DataTable dt
        protected void InsetData(System.Data.DataTable dt)
        {
            int i = 0;
            string MATER_ID = "";
            string MATER_NAME = "";
            string MATER_COUNT = "";
            string MATER_SPEC = "";
            string MATER_COMPANY = "";
            string MATER_TIME = "";
            foreach (DataRow dr in dt.Rows)
            {
                //此处遍历获取excel的数据
                MATER_ID = dr[0].ToString().Trim();
                MATER_NAME = dr[1].ToString().Trim();
                MATER_COUNT = dr[2].ToString().Trim();
                MATER_SPEC = dr[3].ToString().Trim();
                MATER_COMPANY = dr[4].ToString().Trim();
                MATER_TIME = dr[5].ToString().Trim();
                //此处执行你的数据库插入语句即可
                string strInsert = "insert into '你的数据库名'.'你的表名' (MATER_ID,MATER_NAME,MATER_COUNT,MATER_SPEC,MATER_COMPANY,MATER_TIME) values(" + MATER_ID + ",'" + MATER_NAME + "'," + MATER_COUNT + ",'" + MATER_SPEC + "','" + MATER_COMPANY + "',to_date('" + MATER_TIME + "','yyyy-mm-dd hh24:mi:ss'))";
                int count = new BLL.Common.ComData().ExecuteNonQuery(strInsert);
                if (count != 0)
                {
                    i++;
                }
                else
                {
                    Alert("导入失败,数据格式出错!!");
                }
            }
            if (i == dt.Rows.Count)
            {
                Alert("导入成功:共导入" + i + "组数据!!");
            }
            else {
                Alert("未完全导入:共导入" + i + "组数据!!");
            }
            Search();
        }
        //--------------------------------------------------------------->



评论 4 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

Mr_周先生

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值