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 }

 

文件模板如下:

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

posted @ 2017-04-18 15:11  FelixWang  阅读(10134)  评论(8编辑  收藏  举报