zoukankan      html  css  js  c++  java
  • Excel导入+写入数据库

    1.引用服务

    2.前端

    这里是上传Excel功能页面

    <div>
        <form action="/Improve_Excel/get_Excel" method="post" enctype="multipart/form-data">//上传文件必须要设置enctype="multipart/form-data"!!!
    
            <input type="file" id="" name="file" value="上传文件" />
            <br />
            <br />
            <input type="submit" id="" name="" value="上传文件按钮" />
    
        </form>
    </div>
    
    

    3.后端

    using Aspose.Cells;
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Web;
    using System.Web.Mvc;
    
    namespace JJQ_Practice.Controllers
    {
        public class Improve_ExcelController : Controller
        {
            // GET: Improve_Excel
            public ActionResult Index()
            {
                return View();
            }
            public ActionResult get_Excel()
            {
                /////////////////////////////////////////////////////////////////
                //上传并保存文件
                HttpPostedFileBase file = Request.Files["file"];
                if (file == null || file.ContentLength <= 0)
                {
                    return Content("请选择文件!");
                }
                Stream streamfile = file.InputStream;
                string FinName = Path.GetExtension(file.FileName);//得到文件后缀名
                if (FinName != ".xls" && FinName != ".xlsx")
                {
                    return Content("只能上传Excel文档");
                }
                string file_path = Server.MapPath("file_centre");
                var GUID = Guid.NewGuid();
                if (!Directory.Exists(file_path))
                {
                    Directory.CreateDirectory(file_path);
                }
                var file_Path_Url = Path.Combine(file_path, Path.GetFileName(file.FileName));
                file.SaveAs(file_Path_Url);//上传后保存文件
                ////////////////////////////////////////////////////////////////
                var dt = GetExcelData(file_Path_Url, 0);//得到第1个sheet表;index=0,1,2,3,...
                Workbook book = new Workbook(file_Path_Url);
                var all_sheet_Count = book.Worksheets.Count;//得到execl表中有几个sheet表,数量;;为以后(本实例中没有去实现)一execl多表写入做for循环准备
                //!!!!!!!声明数据库中对应的表的表名;dbo.libraya表!!!!!!!重要!!!!!
                var table1 = "aa";//!!!!!!!声明数据库中对应的表的表名(就是数据库中已经有的表,没有数据的表);dbo.aa表!!!!!!!重要!!!!!
                BatchInsertBySqlBulkCopy(dt, table1);
                return Content("写入成功!");
            }
            public static void BatchInsertBySqlBulkCopy(DataTable dt, string tableName)
            {
                var connString = "Data Source=*******;Initial Catalog=*******;User ID=*******;Password=*******;Min Pool Size=10;Max Pool Size=255;Connect Timeout=30";
                using (SqlBulkCopy sbc = new SqlBulkCopy(connString))
                {
                    sbc.BatchSize = dt.Rows.Count;
                    sbc.BulkCopyTimeout = 10;
                    sbc.DestinationTableName = tableName;
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        sbc.ColumnMappings.Add(dt.Columns[i].ColumnName, i);
                    }
                    //将dt表中的数据全部写入数据库中对应名为tableName的表中
                    sbc.WriteToServer(dt);
                }
            }
            #region Excel组件:读取服务器端文件(配合导入用)
            public DataTable GetExcelData(string strSysUrl, int pageInfo)
            {
                try
                {
                    //解析插入数据库
                    Workbook book = new Workbook(strSysUrl);
                    Worksheet sheet = book.Worksheets[pageInfo];
                    Cells cells = sheet.Cells;
                    var num = book.Worksheets.Count;
                    //提取excel数据 转换为DataTable
                    DataTable dt = cells.ExportDataTableAsString(0, 0, cells.MaxDataRow + 1, cells.MaxDataColumn + 1, true);
                    return dt;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
            #endregion
    
        }
    }
    
    
  • 相关阅读:
    WPF 碰撞检测
    设置完在Canvas的位置后,控件HitTest不响应的问题
    Comparing the Performance of .NET Serializers(zz)
    Converting Stream to String and back…what are we missing?
    C# 序列化(Serialize)与反序列化(Deserialize)ZZ
    如何:从代码创建 UML 类图(ZZ)
    nginx 502 bad gateway
    mysql innodb_buffer_pool_size mysql占用内存大小和主从复制并行线程数量
    lvreduce -L 1000M /dev/vg0/lv0 表示最后缩减至多大,不是减少了多大
    nginx 4层tcp代理获取真实ip
  • 原文地址:https://www.cnblogs.com/jsll/p/11671360.html
Copyright © 2011-2022 走看看