zoukankan      html  css  js  c++  java
  • MVC4.0 上传Excel并存入数据库

    这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的!

         MVC实现了显示和控制的分离就不可能再使用服务端控件了,所以我们就又回到了原始的表单提交,AJAX异步提交数据什么的,不多说直接上代码,简单的写一下

         View: 

                   <form id="form" name="form" enctype="multipart/form-data" method="post" action="/DataInfoAndCal/Cal">

                       <input type="file" name="fileName" />

                       <input name="info" type="submit" value="导&nbsp;&nbsp;入" class="bt_bg" />

                  </form>

    在控制器中接受选中的文件 可以这样子:  HttpPostedFileBase fb = Request.Files[0];

                                                         string fileName = fb.FileName;  //获取到文件名  xx.xls

                                                         fb.SaveAs(Server.MapPath("~/App_Data/Excel/Model.xls"));

     判断什么的都是浮云就不写上去了

    好了上传成功,注意 <input type="file" name="fileName" />这个标签使用 HttpPostedFileBase fb = Request.Files[0];在Chome浏览器下只能够获得文件名称而不能够获得完整路径 这个问题还没解决

    好的下一步将Excel转换为DataSet数据集,这个在这里就好WebForm没什么区别了 直接上代码

     DataSet dsCal = new DataSet();

    dsCal = GetDataSet(fb.FileName);

    //下面是方法

    #region EXCEL数据转换DataSet
    /// <summary>
    /// EXCEL数据转换DataSet
    /// </summary>
    /// <param name="filePath">文件路径</param>
    /// <param name="search">表名</param>
    /// <returns></returns>
    protected DataSet GetDataSet(string filePath)
    {
    string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath("~/App_Data/Excel/Model.xls") + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';";
    OleDbConnection objConn = null;
    objConn = new OleDbConnection(strConn);
    objConn.Open();
    DataSet ds = new DataSet();
    List<string> List = new List<string> { };
    DataTable dtSheetName = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
    foreach (DataRow dr in dtSheetName.Rows)
    {
    if (dr["Table_Name"].ToString().Contains("$") && !dr[2].ToString().EndsWith("$"))
    {
    continue;
    }
    string s = dr["Table_Name"].ToString();
    List.Add(s);
    }
    try
    {
    for (int i = 0; i < List.Count; i++)
    {
    ds.Tables.Add(List[i]);
    string SheetName = List[i];
    string strSql = "select * from [" + SheetName + "]";
    OleDbDataAdapter odbcCSVDataAdapter = new OleDbDataAdapter(strSql, objConn);
    DataTable dt = ds.Tables[i];
    odbcCSVDataAdapter.Fill(dt);
    }
    objConn.Close();
    return ds;
    }
    catch (Exception ex)
    {
    return null;
    }
    }
    #endregion

    这里面注意取到的Excel的表名的集合可能会有不是$结束的,这是由Excel内部处理导致的 直接筛选下就OK了 

    顺利的完成Excel的导入上转换  存入数据库等做完再写

    番外话:毕业一年来第一次在博客园里面写东西,感觉记录下成长的脚印是件很开心的事情

  • 相关阅读:
    切换到真正的最高权限 SYSTEM 账户界面
    javascript中replace的正则表达式语法
    微软系统漏洞_超长文件路径打造私人地盘
    JAVA控制台
    PowerPoint绘图笔不能用
    《JavaScript核心技术》
    Catch(...) C++中三个点
    XMLHttp连续调用SEND需要注意的问题
    Wscript中的事件机制
    JavaScript(JS)常用的正则表达式
  • 原文地址:https://www.cnblogs.com/a164266729/p/MVC_Data.html
Copyright © 2011-2022 走看看