ASP.NET MVC导入excel到数据库

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);
        }
时间: 2024-10-08 08:34:06

ASP.NET MVC导入excel到数据库的相关文章

Asp.NET MVC 导入Excel数据教程 手把手教你系列!!!

先上效果图 1.引言 小弟最近接了个大学生的毕业设计,收了100块钱让做一个ASP.NET MVC导入Excel到数据库的功能,由于以前没做过就到处搜索资料,但是发现网上的资料不是直接贴一大堆乱起八遭的源码,就是需要借用NPOI第三方类库太麻烦了,况且预算才100RMB简直不值得,所以小弟尝试自己动手丰衣足食,所以就有了这篇博客. 先上一张小弟的思路图: (说明:没有安装做流程图的软件!凑合着看吧) 2 进入正题 首先跟着小弟先创建一个默认的MVC项目(相信大家都会创建,这里就不演示了) 第一步

ASP.NET MVC下载excel文档

问题来自论坛: 很早以前,学习做asp.net练习时,就是分享过<ASP.NET MVC应用程序实现下载功能>http://www.cnblogs.com/insus/p/3615714.html 比如你的excel文档,是存放于project的DownloadFiles目录之下: 创建一个控制器,如今个月为八月,就创建一个AugControllers: 上面有句“application/vnd.ms-excel” Office MIME type: 参考<Microsoft Offic

一步步实现ABAP后台导入EXCEL到数据库【1】

在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户可能有大量的数据需要定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台作业,既可以节约用户的时间,也可以有效利用闲时的服务器资源.下面来介绍一下相关的知识和具体实践办法. 本文链接:http://www.cnblogs.com/hhelibeb/p/5912330.html 原创内容,转载请注明 1,定义结构 首先,准备一个EXCEL文件.假设一个相对简单的情景

将asp.net MVC导入 Azure Redis Cache

http://blogs.msdn.com/b/msdntaiwan/archive/2014/06/08/15-asp-net-mvc-movie-azure-redis-cache.aspx 将asp.net MVC导入 Azure Redis Cache

[ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分钟内用ASP.Net MVC创建一个电影数据库应用程序》

[ASP.NET MVC2 系列]      [ASP.NET MVC2 系列] ASP.Net MVC教程之<在15分钟内用ASP.Net MVC创建一个电影数据库应用程序>      [ASP.NET MVC2 系列] ASP.Net MVC教程之<ASP.NET MVC 概述>     [ASP.NET MVC2 系列] 理解MVC应用程序的执行过程     [ASP.NET MVC2 系列] ASP.NET MVC Routing概述      [ASP.NET MVC2

.Net core 使用NPOI 直接导入Excel到数据库(即不先将Excel保存到服务器再读取文件到数据库)

原文:.Net core 使用NPOI 直接导入Excel到数据库(即不先将Excel保存到服务器再读取文件到数据库) 1 /// <summary> 2 /// 导入信息 3 /// </summary> 4 /// <param name="file"></param> 5 /// <returns></returns> 6 /// /Public/PublicPool/ImportCustomer 7 pub

ASP.NET MVC 4 - 上传图片到数据库

这里演示如何在MVC WEB应用程序如何上传图片到数据库以及如何在WEB页面上显示图片.数据库表对应整个Model类,不单图片数据一个字段,我们从数据表的定义开始: CREATE TABLE [dbo].[Products] ( [ProductID] INT IDENTITY (1, 1) NOT NULL, [Name] NVARCHAR (MAX) NOT NULL, [Description] NVARCHAR (MAX) NOT NULL, [Price] DECIMAL (18, 2

【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

目录 [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策略(MVC5+EF6) [第四篇]ASP.NET MVC快速入门之完整示例(MVC5+EF6) 请关注三石的博客:http://cnblogs.com/sanshi 新建项目 打开VS2015,找到菜单项[文件->新建->项目],打开向导对话框: 注意我们的选择项: 1.     运行平台:.NET FrameWork 4.5 2.     项目模板:ASP.NET W

ASP.NET MVC导出excel(数据量大,非常耗时的,异步导出)

要在ASP.NET MVC站点上做excel导出功能,但是要导出的excel文件比较大,有几十M,所以导出比较费时,为了不影响对界面的其它操作,我就采用异步的方式,后台开辟一个线程将excel导出到指定目录,然后提供下载. 效果如下: 选中了多行,会导出多个工作簿sheet,一个汇总的,其他的就是明细数据. 这里我使用了NPOI组件来进行excel导出,下面是要几个封装好的类,从网上找的,然后修改了一下. GenerateSheet.cs using NPOI.SS.UserModel; usi