ASP.NET MVC匯入excel到資料庫

來源:互聯網
上載者:User

標籤:

MVC匯入excel和webform其實沒多大區別,以下為代碼:

視圖StationImport.cshtml的代碼:

@{    ViewBag.Title = "StationImport";    Layout = "~/Areas/Admin/Views/Shared/_index.cshtml";}@using (Html.BeginForm("StationImport", "Station", FormMethod.Post, new { enctype = "multipart/form-data" })){    <h2>        基站資訊匯入</h2>    <div>        <fieldset id="myfieldset">            <legend>excel模版格式 </legend><font color="red">匯入基站的模板格式如下,若模板格式不正確,則相應的基站不能匯入!</font><br />            <img src="http://www.cnblogs.com/http://www.cnblogs.com/Content/AdminImages/stationexceltemplate.png" />            <p style="color: Red; text-align: center;">@Html.ActionLink("下載模版", "GetFile")</p>        </fieldset>    </div>    <div style="margin-top: 20px;">        <fieldset id="myfieldset1">            <legend>基站批量資訊匯入</legend>            <p>                選擇檔案:<input id="FileUpload" type="file" name="files" style="width: 250px; height: 24px;                    background: White" class="easyui-validatebox" /></p>            <p>                <input id="btnImport" type="submit" value="匯入" style="width: 60px; height: 28px;" /></p>            <p style="color: Red; text-align: center;">@ViewBag.error</p>        </fieldset>    </div>}

控制器相關方法的代碼:使用TransactionScope類以確儲存儲資料全部都成功執行才算完成。如果要使用TransactionScope類,必須在項目中添加System.Transaction組件。

  #region 大量匯入基站        public ActionResult StationImport()        {            return View();        }        [HttpPost]        public ActionResult StationImport(HttpPostedFileBase filebase)        {            HttpPostedFileBase file=Request.Files["files"];            string FileName;            string savePath;            if (file == null||file.ContentLength<=0)            {                ViewBag.error = "檔案不可為空";                return View();            }                      else            {                   string filename= Path.GetFileName(file.FileName);                 int filesize = file.ContentLength;//擷取上傳檔案的大小單位為位元組byte               string fileEx = System.IO.Path.GetExtension(filename);//擷取上傳檔案的副檔名               string NoFileName = System.IO.Path.GetFileNameWithoutExtension(filename);//擷取無副檔名的檔案名稱               int Maxsize = 4000 * 1024;//定義上傳檔案的最大空間大小為4M               string FileType = ".xls,.xlsx";//定義上傳檔案的類型字串               FileName = NoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx;                if (!FileType.Contains(fileEx))                {                    ViewBag.error = "檔案類型不對,只能匯入xls和xlsx格式的檔案";                    return View();                }                if (filesize >= Maxsize)                {                    ViewBag.error = "上傳檔案超過4M,不能上傳";                    return View();                }                string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/excel/";                 savePath = Path.Combine(path, FileName);                file.SaveAs(savePath);            }                        //string result = string.Empty;            string strConn;            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +savePath+ ";" + "Extended Properties=Excel 8.0";            OleDbConnection conn = new OleDbConnection(strConn);            conn.Open();            OleDbDataAdapter myCommand = new OleDbDataAdapter("select * from [Sheet1$]", strConn);            DataSet myDataSet = new DataSet();            try            {                myCommand.Fill(myDataSet, "ExcelInfo");            }            catch (Exception ex)            {                ViewBag.error = ex.Message;                return View();            }            DataTable table = myDataSet.Tables["ExcelInfo"].DefaultView.ToTable();                        //引用事務機制,出錯時,事物復原            using (TransactionScope transaction = new TransactionScope())            {                for (int i = 0; i < table.Rows.Count; i++)                {                    //擷取地區名稱                    string _areaName = table.Rows[i][0].ToString();                    //判斷地區是否存在                    if (!_areaRepository.CheckAreaExist(_areaName))                    {                        ViewBag.error = "匯入的檔案中:" + _areaName + "地區不存在,請先添加該地區";                        return View();                    }                    else                    {                        Station station = new Station();                        station.AreaID = _areaRepository.GetIdByAreaName(_areaName).AreaID;                        station.StationName = table.Rows[i][1].ToString();                        station.TerminaAddress = table.Rows[i][2].ToString();                        station.CapacityGrade = table.Rows[i][3].ToString();                        station.OilEngineCapacity = decimal.Parse(table.Rows[i][4].ToString());                        _stationRepository.AddStation(station);                    }                }                transaction.Complete();            }            ViewBag.error = "匯入成功";            System.Threading.Thread.Sleep(2000);            return RedirectToAction("Index");        }        #endregion

檔案下載,FileResult類可以響應任意的檔案內容,包括二進位格式的資料,在ASP.NET MVC中實現FileResult類的子類共有3個,分別是

1、FilePathResult:響應一個實體檔案

2、FileContentResult:響應一個byte數組的內容

3、FileStreamResult:響應一個Stream資料

FilePathResult和FileStreamResult的區別是什嗎?我們又該如何取捨呢?主要的區別是FilePathResult使用HttpResponse.TransmitFile來將檔案寫入Http輸出資料流。這個方法並不會在伺服器記憶體中進行緩衝,所以這對於發送大檔案是一個不錯的選擇。他們的區別很像DataReader和DataSet的區別。於此同時, TransmitFile還有一個bug,這可能導致檔案傳到用戶端一半就停了,甚至無法傳送。而FileStreamResult在這方面就很棒了。比如說:返回Asp.net Chart 控制項在記憶體中產生的圖表圖片,而這並不需要將圖片存到磁碟中.

File()輔助方法能自動選取不同的FileResult類進行。

以下為檔案下載的代碼:

      public FileResult GetFile()        {            string path = AppDomain.CurrentDomain.BaseDirectory + "uploads/excel/";            string fileName = "基站資訊Excel模版.xls";            return File(path + fileName, "text/plain", fileName);        }

 

 

ASP.NET MVC匯入excel到資料庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.