zoukankan      html  css  js  c++  java
  • ASP.NET实现excel导入数据库

    ASP.NET实现excel导入数据库
    原创Mr_周先生 最后发布于2018-03-27 18:56:02 
    展开
    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();
    }
    //--------------------------------------------------------------->
    ————————————————
    版权声明:本文为CSDN博主「Mr_周先生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/hangxing_tianxia/article/details/79716766

  • 相关阅读:
    VC++60运行出结果后直接关闭窗口了
    求助MFC编程实现可视化
    多个do循环优化问题
    召唤大神这道题怎么就乱码了呢~~~
    HBASE 优化之REGIONSERVER
    HBASE SHELL 命令使用
    HBASE 基础命令总结
    HBASE基础知识总结
    2018年年终总结
    IMPALA部署和架构(一)
  • 原文地址:https://www.cnblogs.com/ljs-13/p/12424956.html
Copyright © 2011-2022 走看看