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 }
文件模板如下:
以上为整个文件导入的全部程序,如果有什么问题欢迎大家积极评论……