MVC3 Excel导入数据到sql Server数据库

MVC Excel导入到数据库,我们客户有一个固定的Excel,每个月都让我手动录入到库内(一开始不会SQL的导入)一两次我还好,蛮乐意的后来多了,我就使用了SQL自带的导入,可是每个月都这样,就太恶心了,为了凸显我是一个程序员,我跟项目经理提出,做一个页面上传Excel文件的页面,然后保存到数据库,让客户上传,天天上传都可以,不要每个月找我一次,而且客户还是个女的,最让我不开心的是她还那么土,然后项目经理说既然是你想出来的,那么你就自己写,我化石了,则个则.............ge。我是一个有骨气的人,所以只好试试啦。

视图完整代码

@using (Html.BeginForm("StationImport", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <h2>基站信息导入</h2>
    <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>
}

后台完整代码

private MySchoolEntities db = new MySchoolEntities();
        public ActionResult Index()
        {
            return View();
        }
      [HttpPost]
        public ActionResult StationImport(HttpPostedFileBase filebase)
        {
            HttpPostedFileBase file=Request.Files["files"];
            string FileName = string.Empty;
            string strConn = string.Empty;
            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 = Path.GetExtension(filename); //获取上传文件的扩展名
               string noFileName =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);

if (fileEx.Equals(".xlsx"))
                    strConn = "Provider=Microsoft.Ace.OleDb.12.0;Data Source=" + savePath + ";Extended Properties=‘Excel 12.0 Xml; HDR=YES; IMEX=1‘";
                else if (fileEx.Equals(".xls"))
                    strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + savePath + ";Extended Properties=‘Excel 8.0; HDR=YES; IMEX=1‘";
            }
            var conn = new OleDbConnection(strConn);
            conn.Open();
            var myCommand = new OleDbDataAdapter("select * from [Sheet1$]", strConn);
            var myDataSet = new DataSet();
            try
            {
                myCommand.Fill(myDataSet, "ExcelInfo");
            }
            catch (Exception ex)
            {
                ViewBag.error = ex.Message;
                return View();
            }
            DataTable table = myDataSet.Tables["ExcelInfo"].DefaultView.ToTable();
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    //获取地区名称
                    var station = new tab_Student
                        {
                          Name = table.Rows[i][0].ToString(),
                         Value = table.Rows[i][1].ToString(),
                        };
                    db.tab_Student.Add(station);
                }
              db.SaveChanges();
            ViewBag.error = "导入成功";
            System.Threading.Thread.Sleep(2000);
            return RedirectToAction("Index");
        }

时间: 2024-10-08 08:08:22

MVC3 Excel导入数据到sql Server数据库的相关文章

Excel导入数据到Sql server 中出错:“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”

从Excel导入数据到Sql server 时,由于表中的数据有的很长,导入时出现如下错误(如果数据不是很长,255内以内,则不会出现错误): 出错原因: SQL Server的导入导出为了确定数据表的每个字段类型,取excel表的每个字段的前几行(3行即可)来判别.如果前3条是少于255的字符串,则设成nvarchar(255)类型,所以,当如果第四条或更后的数据的字符数大于255,则会报错. 解决方法: 在导入数据前,可以手动加几条无关的数据,让字段的字符数大于255,则导入时SQL Ser

Kettle从excel导入数据到sql server

从excel工作表中读取数据逐行执行insert语句插入到sqlserver 为了简单起见只选取了三个个字段作为参数,日期,字符类型的需要加上'' 执行结果如下:

快速批量导入庞大数据到SQL SERVER数据库(ADO.NET)

原文地址:http://www.cnblogs.com/chenxizhang/archive/2008/11/11/1331060.html 如果你需要在程序中批量插入成千上万行的数据,你会怎么编写代码呢?最近在帮朋友调优这个的时候,总结了几种方法,并对其进行比较. 大概的界面如下,我模拟了一个客户资料表. 数据我是放在一个XML文件的,大约6734行.类似下面的格式 <?xml version="1.0" encoding="utf-8" ?> &l

定时从多个Excel导入数据到SQL数据库

Scheduling Data Imports in SQL Server Importing data into a SQL Server database isn't really that tricky: there's a straightforward wizard that you can follow to get information from Microsoft Excel, Access and even text files.  But what if you want

Excel导入MYSQL\ORACLE\SQL SERVER等数据库

今天客户给了个Excel的数据,需要和我本地库的数据做对比,不想用UE初始化,感觉很麻烦,最后在网上找了一个公式稍微修改了一下解决了,备忘如下: 在EXCEL中要插入的列最后增加一列,然后输入以下代码(请把A2和B2换成你自己的单元格名称,多个参数之间用英文状态下的逗号分隔,) =CONCATENATE("INSERT INTO B_CODE (N_CODE, C_NAME) VALUES ('",A2,"','",B2,"');") 点击刚刚增

Excel表数据导入Sql Server数据库中

Excel表数据导入Sql Server数据库的方法很多,这里只是介绍了其中一种: 1.首先,我们要先在test数据库中新建一个my_test表,该表具有三个字段tid int类型, tname nvarchar类型, tt nvarchar类型(注意:my_test表中的数据类型必须与Excel中相应字段的类型一致) 2. 我们用SELECT * FROM  OPENROWSET( 'Microsoft.Jet.OLEDB.4.0 ', 'Excel  5.0;DatabASE=[Excel表

极限挑战—C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码)

原文:极限挑战-C#100万条数据导入SQL SERVER数据库仅用4秒 (附源码) 实际工作中有时候需要把大量数据导入数据库,然后用于各种程序计算,本实验将使用5中方法完成这个过程,并详细记录各种方法所耗费的时间. 本实验中所用到工具为VS2008和SQL SERVER 2000.SQL SERVER 2008,分别使用5中方法将100万条数据导入SQL 2000与SQL 2008中,实验环境是DELL 2850双2.0GCPU,2G内存的服务器.感兴趣的朋友可以下载源代码自己验证一下所用时间

SQL Server数据库中导入导出数据及结构时主外键关系的处理

2015-01-26 软件开发中,经常涉及到不同数据库(包括不同产品的不同版本)之间的数据结构与数据的导入导出.处理过程中会遇到很多问题,尤为突出重要的一个问题就是主从表之间,从表有外检约束,从而导致部分数据无法导入. 情景一.同一数据库产品,相同版本 此种情况下源数据库与目标数据库的数据结构与数据的导入导出非常简单. 方法1:备份源数据库,恢复到目标数据库即完成. 方法2:使用SQL Sever数据库自带的[复制数据库]功能或者[导入数据]功能按照向导操作即可. 情景二.同一数据库产品,不同版

从SSMS中复制代码到Word中数字消失--没解决&amp;&amp;Excel连接SQL Server数据库

1.因工作需要需把SSMS中的代码复制到word中,可发现一个问题: 从SQL Server2008的SSMS中复制代码到Word 2013中,如果是中文汉字+阿拉伯数字,阿拉伯数字会消失.如果是英文+阿拉伯数字就没有问题.在网上也没找到方法,问一哥们,他说我们都是英文,没遇到过.记录下来吧 2.每次发的数据都在数据库中,之前都是select * from TableName,然后"连同标题一起复制",然后再粘贴到Excel中.但其实excel可以连接SQL Server的,其实操作很