zoukankan      html  css  js  c++  java
  • asp.net 导入Excel记录到数据库中

    常用到的一个数据库导入功能,这样的话就省了很大一部分时间来处理程序上的问题而不是无休止的重复复制粘贴动作。

    其他的废话不多说,直接上代码:

    前提条件:

         根目录下建立uploadfiles文件夹(用于保存上传的xls文件);

    aspx部分:

          添加uploadfile和button控件即可。

    aspx 部分代码:

     1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     2 
     3 <html xmlns="http://www.w3.org/1999/xhtml">
     4 <head runat="server">
     5     <title></title>
     6 </head>
     7 <body>
     8     <form id="form1" runat="server">
     9     <div>
    10         <asp:FileUpload ID="FileUpload1" runat="server" />
    11         <asp:Button ID="Button1" runat="server"  Text="确定上传" onclick="Button1_Click" />
    12     </div>
    13     </form>
    14 </body>
    15 </html>

    cs 部分:

      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Web;
      5 using System.Web.UI;
      6 using System.Web.UI.WebControls;
      7 using System.Data;
      8 using System.Data.OleDb;
      9 using System.IO; 10 
     11 namespace ImportExcel
     12 {
     13     public partial class _Default : System.Web.UI.Page
     14     {
     15         protected void Page_Load(object sender, EventArgs e)
     16         {
     17 
     18         }
     19 
     20         #region   问题:未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
     21         //  解决访问Excel数据源时出现 未在本地计算机上注册Microsoft.ACE.OLEDB.12.0提供程序
     22         //  1、确保安装了Microsoft.ACE.OLEDB.12.0驱动
     23         //  http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe
     24         //  2、在vs中右击项目--》属性--》生成 下的 目标平台 改为x86
     25         //  如果以上两个方法还是不行的话,用第三个方法
     26         //  3、在对应的 IIS 应用程序池中,“设置应用程序池默认属性”右击/“高级设置”/"启用32位应用程序",设置为 true。
     27         #endregion
     28 
     29         public System.Data.DataTable GetExcelDatatable(string fileUrl)
     30         {
     31             //支持.xls和.xlsx,即包括office2010等版本的   HDR=Yes代表第一行是标题,不是数据;
     32             string cmdText = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";
     33             System.Data.DataTable dt = null;
     34             //建立连接
     35             OleDbConnection conn = new OleDbConnection(string.Format(cmdText, fileUrl));
     36             try
     37             {
     38                 //打开连接
     39                 if (conn.State == ConnectionState.Broken || conn.State == ConnectionState.Closed)
     40                 {
     41                     conn.Open();
     42                 }
     43 
     44                 System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
     45                 string strSql = "select * from [Sheet1$]";
     46                 OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);
     47                 DataSet ds = new DataSet();
     48                 da.Fill(ds);
     49                 dt = ds.Tables[0];
     50                 return dt;
     51             }
     52             catch (Exception exc)
     53             {
     54                 throw exc;
     55             }
     56             finally
     57             {
     58                 conn.Close();
     59                 conn.Dispose();
     60             }
     61         }
     62 
     63         protected void Button1_Click(object sender, EventArgs e)
     64         {
     65             if (FileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件
     66             {
     67                 Response.Write("<script>alert('请您选择Excel文件')</script> ");
     68                 return;//当无文件时,返回
     69             }
     70             string IsXls = Path.GetExtension(FileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名
     71             if (IsXls != ".xlsx" || IsXls != ".xls")
     72             {
     73                 Response.Write("<script>alert('只可以选择Excel文件')</script>");
     74                 return;//当选择的不是Excel文件时,返回
     75             }
     76             string filename = FileUpload1.FileName;              //获取Execle文件名  DateTime日期函数
     77             string savePath = Server.MapPath(("uploadfiles\") + filename);//Server.MapPath 获得虚拟服务器相对路径
     78             DataTable ds = new DataTable();
     79             FileUpload1.SaveAs(savePath);                        //SaveAs 将上传的文件内容保存在服务器上
     80             ds = GetExcelDatatable(savePath);           //调用自定义方法
     81             DataRow[] dr = ds.Select();            //定义一个DataRow数组
     82             int rowsnum = ds.Rows.Count;
     83             int successly = 0;
     84             if (rowsnum == 0)
     85             {
     86                 Response.Write("<script>alert('Excel表为空表,无数据!')</script>");   //当Excel表为空时,对用户进行提示
     87             }
     88             else
     89             {
     90                 string _Result = "";
     91                 for (int i = 0; i < dr.Length; i++)
     92                 {
     93                     //前面除了你需要在建立一个“upfiles”的文件夹外,其他的都不用管了,你只需要通过下面的方式获取Excel的值,然后再将这些值用你的方式去插入到数据库里面
     94                     string title = dr[i]["标题"].ToString();
     95                     string linkurl = dr[i]["链接地址"].ToString();
     96                     string categoryname = dr[i]["分类"].ToString();
     97                     string customername = dr[i]["内容摘要"].ToString();
     98 
     99                     try
    100                     {
    101                         var uuid = Guid.NewGuid().ToString();
    102                         string sql = string.Format("insert into testdb(id,title,linkurl,categoryname,customername) values('{0}','{1}','{2}','{3}','{4}')", uuid, title, linkurl, categoryname, customername);
    103                         int count = SqlDbHelper.ExecuteNonQuery(sql);
    104                         if (count > 0)
    105                             successly++;
    106 
    107                     }
    108                     catch (Exception ex)
    109                     {
    110                         _Result = _Result + ex.InnerException + "\n\r";
    111                     }
    112                 }
    113                 if (successly == rowsnum)
    114                 {
    115                     string strmsg = "Excle表导入成功!";
    116                     System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" + strmsg + "');</script>");
    117                 }
    118                 else
    119                 {
    120                     Response.Write("<script>alert('Excle表导入失败!');</script>");
    121                 }
    122             }
    123         }
    124     }
    125 }

    文件模板如下:

    以上为整个文件导入的全部程序,如果有什么问题欢迎大家积极评论……

  • 相关阅读:
    python 文件相关知识
    python字符串,列表,字符串,元组,集合的一些方法
    一些小技巧和破坏性的实验
    CentOs 系统启动流程相关
    入手内核的前篇之进程和计划任务
    外部中断的理解
    串口程序的理解
    USART1_IRQHandler 函数的理解
    STM32串口的理解
    中断NVIC优先级的理解
  • 原文地址:https://www.cnblogs.com/felix-wang/p/6727945.html
Copyright © 2011-2022 走看看