ASP.NET 从Excel文件导入数据到数据库(笔记)
2010-11-03 11:47
791 查看
本文同步发布在博客园 http://www.cnblogs.com/zk09/articles/1868304.html
页面HTML代码:
<%@ page language="C#" autoeventwireup="true" codefile="Default.aspx.cs" inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Excel 数据导入 数据库</title>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function(){
$("#"+"<%=btnImport.ClientID %>").click(function(){
var fileName = $("#"+"<%=excelFile.ClientID %>").val();
if(fileName==""){
alert("请选择Excel文件!");
return false;
}
else{
var extension = fileName.substring(fileName.lastIndexOf('.')+1);
if(extension!="xlsx"&&extension!="xls"){
alert("上传的文件不是Excel文件,请重试!");
return false;
}
}
return true;
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<fieldset>
<legend>数据导入:</legend>
<table>
<tr>
<td style="width: 182px">
数据Excel:</td>
<td>
<asp:fileupload id="excelFile" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:button id="btnImport" runat="server" text="导入" onclick="btnImport_Click" />
<input id="btnCancel" type="button" value="取消" onclick='window.location.href="Default.aspx"' /></td>
</tr>
</table>
</fieldset>
</div>
<div id="errorDiv" runat="server">
<fieldset>
<legend>错误信息:</legend>
<textarea id="errorArea" runat="server" style="width: 722px; height: 88px"></textarea>
</fieldset>
</div>
<div id="confrimDiv" runat="server">
<fieldset>
<legend>导入确认:</legend>
<asp:gridview id="GVConfirm" runat="server" cssclass="grid">
</asp:gridview>
<div id="buttonDiv" runat="server" visible="false">
<asp:button id="btnConfirm" runat="server" text="确定" onclick="btnConfirm_Click" />
<input id="btnNotConfirm" type="button" value="取消" onclick='window.location.href="Default.aspx"' />
</div>
</fieldset>
</div>
</form>
</body>
</html>
C# 代码
页面HTML代码:
<%@ page language="C#" autoeventwireup="true" codefile="Default.aspx.cs" inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Excel 数据导入 数据库</title>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
$(function(){
$("#"+"<%=btnImport.ClientID %>").click(function(){
var fileName = $("#"+"<%=excelFile.ClientID %>").val();
if(fileName==""){
alert("请选择Excel文件!");
return false;
}
else{
var extension = fileName.substring(fileName.lastIndexOf('.')+1);
if(extension!="xlsx"&&extension!="xls"){
alert("上传的文件不是Excel文件,请重试!");
return false;
}
}
return true;
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<fieldset>
<legend>数据导入:</legend>
<table>
<tr>
<td style="width: 182px">
数据Excel:</td>
<td>
<asp:fileupload id="excelFile" runat="server" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:button id="btnImport" runat="server" text="导入" onclick="btnImport_Click" />
<input id="btnCancel" type="button" value="取消" onclick='window.location.href="Default.aspx"' /></td>
</tr>
</table>
</fieldset>
</div>
<div id="errorDiv" runat="server">
<fieldset>
<legend>错误信息:</legend>
<textarea id="errorArea" runat="server" style="width: 722px; height: 88px"></textarea>
</fieldset>
</div>
<div id="confrimDiv" runat="server">
<fieldset>
<legend>导入确认:</legend>
<asp:gridview id="GVConfirm" runat="server" cssclass="grid">
</asp:gridview>
<div id="buttonDiv" runat="server" visible="false">
<asp:button id="btnConfirm" runat="server" text="确定" onclick="btnConfirm_Click" />
<input id="btnNotConfirm" type="button" value="取消" onclick='window.location.href="Default.aspx"' />
</div>
</fieldset>
</div>
</form>
</body>
</html>
C# 代码
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Text; using System.Data.OleDb; using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { this.initPage(); } /// <summary> /// 通过ViewState保存一个DataTable.用来在现实之后添加到数据库 /// </summary> public DataTable SamplDataTable { get { if (ViewState["SamplDataTable"] == null) return new DataTable(); return (DataTable)ViewState["SamplDataTable"]; } set { ViewState["SamplDataTable"] = value; } } private void initPage() { this.errorDiv.Visible = false; this.confrimDiv.Visible = false; } protected void btnImport_Click(object sender, EventArgs e) { ///取得文件名 string fileName = this.excelFile.FileName; //绝对路径 string path = "~/Excel/" + fileName; path = Server.MapPath(path); try { //暂时保存在服务上 this.excelFile.SaveAs(path); ///读取指定路径 Excel 文件中的内容转换成DataTable DataTable excelDT = ImportToDataSet(path); //声明错误信息字符串 StringBuilder errorBuiler = new StringBuilder(); ///检查 存储在内存中的 Excel DataTable if (Validate(excelDT, errorBuiler)) { //如果检查通过,使用ViewState保存DataSet中数据,在保存到数据库的时候用到 SamplDataTable = excelDT; //页面GridView数据绑定,用来显示从Excel读取出来的数据供用户确认 this.GVConfirm.DataSource = SamplDataTable; this.GVConfirm.DataBind(); this.confrimDiv.Visible = true; this.buttonDiv.Visible = true; } else {//如果检测没有通过,输出相关错误信息 this.errorDiv.Visible = true; this.errorArea.Value = errorBuiler.ToString(); } } catch (Exception ex) { this.errorDiv.Visible = true; this.errorArea.Value = ex.Message; } finally { //关闭,删除 文件 if (File.Exists(path)) File.Delete(path); } } /// <summary> /// 验证指定的Excel规则(列数) /// </summary> /// <param name="excelDT"></param> /// <param name="errorBuiler"></param> /// <returns></returns> public bool Validate(DataTable excelDT, StringBuilder errorBuiler) { bool result = true; if (excelDT.Columns.Count != 5)//假设是5列 { result = false; int difference = excelDT.Columns.Count - 5; if (difference > 0) errorBuiler.AppendLine("要导入的Excel多" + difference.ToString() + "列"); else errorBuiler.AppendLine("要导入的Excel少" + (-difference).ToString() + "列"); } else { //foreach (DataRow row in excelDT.Rows) //{ // if (Exists(row[0].ToString())) // { // result = false; // errorBuiler.AppendLine("内容 " + "'" + row[2].ToString() + "'" + "已存在!"); // } //} } return result; } protected void btnConfirm_Click(object sender, EventArgs e) { ///将GridView中显示的数据(其实是保存在VIewState中)写入到数据库中 if (AddDataTable(SamplDataTable, 0)) { Page.ClientScript.RegisterStartupScript(Page.GetType(), "insertSuccess", ""); } } private bool AddDataTable(DataTable dt, int p) { bool result = true; string sql = BuilderInsertSql(dt, p); try { //执行sql语句 DbHelper.ExecuteSql(); return true; } catch { result = false; } return result; ; } private string BuilderInsertSql(DataTable dt, int p) { //遍历DataTable拼接添加字符串 return ""; } private bool AddDataTable(DataTable SamplDataTable, object p, int p_3) { throw new Exception("The method or operation is not implemented."); } /// <summary> /// 读取指定路径的Excel内容到DataTable中 /// </summary> /// <param name="path"></param> /// <returns></returns> public DataTable ImportToDataSet(string path) { string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "Data Source=" + path + ";" + "Extended Properties='Excel 12.0;HDR=Yes;IMEX=1';"; OleDbConnection conn = new OleDbConnection(strConn); try { DataTable dt = new DataTable(); if (conn.State != ConnectionState.Open) conn.Open(); string strExcel = "select * from [Sheet1$]"; OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, conn); adapter.Fill(dt); return dt; } catch (Exception ex) { throw new Exception(ex.Message); } finally { if (conn.State != ConnectionState.Closed) conn.Close(); } } }:
相关文章推荐
- ASP.NET 从Excel文件导入数据到数据库(笔记)
- ASP.NET 从Excel文件导入数据到数据库(笔记)
- ASP.NET 从Excel文件导入数据到数据库
- 在ASP.NET中将Excel文件中数据导入数据库并显示进度条
- Asp.net中关于excel文件批量导入SQL Server数据表
- 将Excel文件导入到Asp.net后台数据库中
- ASP.NET中数据库数据导入Excel、Word并打印
- ASP.NET Excel数据导入数据库---2
- ASP.NET Excel数据导入数据库
- ASP.NET中数据库数据导入Excel并打印
- [导入]Asp.net 2.0 GridView数据导出Excel文件(示例代码下载)
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案
- asp.net实现 EXCEL数据导入到数据库功能
- asp.net从数据库导出数据到word、excel、txt文本文件
- asp.net_Excel数据导入数据库
- asp.net导入EXCEL内容文件到数据库
- ASP.NET Excel数据导入数据库
- asp.net中EXCEL数据导入到数据库的方法
- ASP.NET中数据库数据导入Excel并打印
- ASP.NET中数据库数据导入Excel并打印(1)