asp.net 導入Excel記錄到數據庫中(轉載)

前提條件:html

     根目錄下創建uploadfiles文件夾(用於保存上傳的xls文件);sql

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 部分:ide

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         //  一、確保安裝了Microsoft.ACE.OLEDB.12.0驅動
 23         //  http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe
 24         //  二、在vs中右擊項目--》屬性--》生成 下的 目標平臺 改成x86
 25         //  若是以上兩個方法仍是不行的話,用第三個方法
 26         //  三、在對應的 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函數

相關文章
相關標籤/搜索