• 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 }

     转载自:https://www.cnblogs.com/felix-wang/p/6727945.html

  • 相关阅读:
    解决adb的"more than one device and emulator"错误
    Swoole实现简单的http服务器
    Unity实现物体位置变换
    Unity实现放大或缩小某个物体
    如何使用WEBSOCKET实现前后端通信
    实体类接收Date类型
    easyExce输出Excel只有表头没有数据问题解决
    报餐统计
    使用 EasyExcel 写Excel数据(表头动态)
    bladex分页
  • 原文地址:https://www.cnblogs.com/Stillwatersrundeep/p/8482550.html
Copyright © 2020-2023  润新知