内容显示页:
protected void btnIMP_Click(object sender, EventArgs e)
{
Response.Redirect("导入页.aspx?backurl=" + DESEncrypt.Encrypt(iurl));
}
aspx:
<head runat="server">
<title></title>
<script type="text/javascript" src="../Page/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="../Page/js/hide_show.js"></script>
<link href="../Page/css/layout.css" rel="stylesheet" type="text/css" />
<link href="../Page/css/Dialog.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../Page/js/jQuery_Dialog.js"></script>
<script type="text/javascript" src="../Page/js/function.js"></script>
<script type="text/javascript" src="../Page/js/jquery.easydrag.js"></script>
<link href="../Page/css/style01.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<div class="DivMain">
<div class="m_nav">
<%=siteMap %><span>></span><a href="javascript:void(0);">记录信息导入</a>
</div>
<!--结束-->
<div class="clearDiv">
</div>
<div class="Search">
批量导入记录信息模板下载:<a href="../Resources/Template/批量导入记录信息.xls">【批量导入记录信息模板】</a>
</div>
<div class="div_right_search">
<table class="table_search_001" width="600">
<tr>
<td>
选择文件:
<asp:FileUpload ID="fileUpload" runat="server" CssClass="txt_file" Width="300px" />
<asp:Button runat="server" Text="EXCEL导入" ID="btnImp" OnClientClick="return check()"
OnClick="btnImp_Click" CssClass="button_sm7" />
<asp:Button runat="server" ID="btnBack" CssClass="button_sm1" Text="返回" OnClick="btnBack_Click" />
</td>
</tr>
</table>
</div>
<div class="div_right_search" id="divHandel" runat="server" style="text-align: left;">
<input type="button" class="button_bg7" onclick="showExcelData('good')" value='显示验证通过' />
<input type="button" class="button_bg7" onclick="showExcelData('bad')" value='显示验证没通过' />
<input type="button" class="button_bg7" onclick="showExcelData('all')" value='显示所有' />
<asp:Button ID="btnImpRight" runat="server" CssClass="button_bg7" Text="导入验证通过" OnClick="btnImpRight_Click"
OnClientClick="return checkIMP();" />
<asp:Button ID="btnCancel" runat="server" CssClass="button_sm1" Text="取 消" OnClick="btnCancel_Click" />
</div>
<div class='clearDiv'>
</div>
<div id="divBadData">
<%Response.Write(GetBadData()); %>
</div>
<div id="divGoodData">
<%Response.Write(GetGoodData()); %>
</div>
</div>
<!-- 背景层DIV -->
<div class="div_documentbg" id="div_documentbg">
</div>
<script language="javascript" type="text/javascript">
function check() {
if ($("#<%=fileUpload.ClientID %>").val() == "") {
$.dialog.alert("请选择需要上传的EXCEL文件。");
return false;
}
var doc_name = $("#<%=fileUpload.ClientID %>").val();
var doc_type = doc_name.substring(doc_name.lastIndexOf("\\") + 1).split(".")[1];
if (doc_type != "xls") {
$.dialog.alert("请选择后缀名为.xls文件。");
return false;
}
if (confirm("您将要导入记录信息")) {
SubmitData2(getLoadingDot("正在操作,请稍后"), 600);
setInterval("$('.tips_jinggao').html(getLoadingDot(\"正在操作,请稍后\"))", 1000);
}
}
function checkIMP() {
SubmitData2(getLoadingDot("正在操作,请稍后"), 600);
setInterval("$('.tips_jinggao').html(getLoadingDot(\"正在操作,请稍后\"))", 1000);
}
function showExcelData(type) {
if (type == "good") {
$("#divBadData").hide();
$("#divGoodData").show();
}
else if (type == "bad") {
$("#divBadData").show();
$("#divGoodData").hide();
}
else {
$("#divBadData").show();
$("#divGoodData").show();
}
}
</script>
</form>
</body>
</html>
aspx.cs:
protected string strTempletTitle1 = string.Empty;
protected string strTemplet = string.Empty;
static string strGoodData = string.Empty;
static string strBadData = string.Empty;
static DataTable excelData = new DataTable();
protected string backurl = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
strTempletTitle1 = "内容一,内容二";
strTemplet = string.Empty;
backurl = Request.QueryString["backurl"];
if (!IsPostBack)
{
strGoodData = string.Empty;
strBadData = string.Empty;
}
ShowHandel();
}
protected void btnImp_Click(object sender, EventArgs e)
{
DataSet ds = new DataSet();
string uploadFileName = string.Empty;
if (fileUpload.HasFile)
{
try
{
uploadFileName = fileUpload.FileName;
string errorMessage = string.Empty;
if (!CheckFileName(fileUpload.FileName, out errorMessage))
{
ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('" + errorMessage + "');", true);
return;
}
DeleteInvoiceFile();
string serverPath = Server.MapPath("../Resources/UpFile/");
string fileName = serverPath + Guid.NewGuid() + ".xls";
if (!Directory.Exists(serverPath))
{
Directory.CreateDirectory(serverPath);
}
fileUpload.SaveAs(fileName);
OleDbConnection conn;
OleDbDataAdapter da;
System.Data.DataTable tblSchema;//存放领域表的结构
IList<string> tblNames;//sheet名称
GetExcelSchema(fileName, out conn, out da, out tblSchema, out tblNames, "YES", 1);
if (ds != null) ds.Clear();
ds = GetEachSheetContent(conn, ref da, tblSchema, ref tblNames);
if (ds.Tables.Count == 0)
{
ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('导入失败,你可能选择了错误的模板,请重新上传。');", true);
return;
}
//验证模板结构
strTemplet = strTempletTitle1;
if (!CheckUploadDataStructure(ds, strTemplet, out errorMessage))
{
ClientScript.RegisterStartupScript(this.GetType(), "check", "$.dialog.alert('" + errorMessage + "');", true);
return;
}
excelData = new DataTable();
excelData = ds.Tables[0];
DataColumn dcErr = new DataColumn();
dcErr.ColumnName = "ErrorDate";
dcErr.DataType = typeof(string);
dcErr.Caption = "错误提示";
excelData.Columns.Add(dcErr);
CheckUploadData();
}
catch (Exception ex)
{
Response.Output.WriteLine(ex.Message);
Response.Output.WriteLine(ex.StackTrace);
Response.End();
}
}
ShowHandel();
}
private void ShowHandel()
{
if (excelData.Rows.Count == 0)
{
divHandel.Visible = false;
}
else
{
divHandel.Visible = true;
}
}
private void InputExcelDataToDB()
{
int exData = 0;
string strSql = string.Empty;
List<string> listSql = new List<string>();
try
{
DataRow[] dr = excelData.Select("ErrorDate='正确'");
if (dr.Count() > 0)
{
strSql = string.Empty;
#region 组SQL语句
for (int i = 0; i < dr.Count(); i++)
{
strSql = @"insert into table(字段)";
strSql += "VALUES ('" + dr[i]["内容一"].ToString().Trim() + "'";
strSql += ",'" + dr[i]["内容二"].ToString().Trim() + "'";
listSql.Add(strSql);
}
#endregion
exData = DbHelperSQL.ExecuteSqlTran(listSql);
if (exData > 0)
{
string url = string.IsNullOrEmpty(backurl) ? "内容显示页.aspx" : DESEncrypt.Decrypt(backurl);
SYS_LOG.AddCommonLog(pfunction.SysLogQueryMenu(Module_Id), "【批量导入记录管理信息成功】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataSuccess('【" + exData + "】记录管理信息被成功导入','" + url + "','1');", true);
}
else
{
SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('操作失败','','3');", true);
}
}
else
{
SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】,操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('数据为空,导入失败','','3');", true);
}
}
catch (Exception ex)
{
SYS_LOG.AddErrorLog(Request.Url.AbsolutePath, "【批量导入记录信息失败】" + ex.Message.ToString().Replace("'", "") + ",操作用户【" + CookiesMan.GetCookie("xy_admin_user", "userTrueName") + "】", CookiesMan.GetCookie("xy_admin_user", "userName"));
ClientScript.RegisterStartupScript(this.GetType(), "handle", "SubmitDataError('操作失败:" + ex.Message.ToString() + "','','3');", true);
}
excelData.Clear();
}
/// <summary>
/// 验证导入数据
/// </summary>
/// <param name="goodData"></param>
/// <param name="badData"></param>
/// <param name="dataAll"></param>
private void CheckUploadData()
{
for (int i = 0; i < excelData.Rows.Count; i++)
{
DataRow dr = excelData.Rows[i];
string strErr = string.Empty;
CheckOption(dr, out strErr);
excelData.Rows[i]["ErrorDate"] = strErr;
}
}
/// <summary>
/// 显示验证通过的数据
/// </summary>
/// <returns></returns>
protected string GetGoodData()
{
if (excelData.Rows.Count == 0)
{
return "";
}
DataRow[] dr = excelData.Select("ErrorDate='正确'");
if (dr.Count() == 0)
{
return "";
}
string strAlert = string.Empty;
if (dr.Count() == excelData.Rows.Count)
{
strAlert = "<font color='green'>全部记录信息都已验证通过</font>";
}
else
{
strAlert = "<font color='yellow'>【" + dr.Count() + "】记录信息验证通过</font>";
}
#region
strGoodData = string.Empty;
strGoodData += "<div class='clearDiv'></div><div class=\"div_right_listtitle\">";
strGoodData += "<div style=\"margin-left:15px;font-weight:bold;padding-top:7px;\">" + strAlert + "</div>";
strGoodData += "</div>";
strGoodData += "<table class='table_list' cellpadding='0' cellspacing='0' >";
strGoodData += "<tr class='tr_title'>";
strGoodData += "<td>内容一</td>";
strGoodData += "<td>内容二</td>";
strGoodData += "</tr>";
for (int i = 0; i < dr.Count(); i++)
{
strGoodData += "<tr class='tr_con_001'>";
strGoodData += "<td>" + dr[i]["内容一"] + "</td>";
strGoodData += "<td>" + dr[i]["内容二"] + "</td>";
strGoodData += "</tr>";
}
strGoodData += "</table>";
#endregion
return strGoodData;
}
/// <summary>
/// 显示验证没有通过的数据
/// </summary>
/// <returns></returns>
protected string GetBadData()
{
if (excelData.Rows.Count == 0)
{
return "";
}
DataRow[] dr = excelData.Select("ErrorDate<>'正确'");
if (dr.Count() == 0)
{
return "";
}
string strAlert = string.Empty;
if (dr.Count() == excelData.Rows.Count)
{
strAlert = "<font color='red'><div class='clearDiv'></div>全部记录信息都没有验证通过</font>";
}
else
{
strAlert = "<font color='red'>【" + dr.Count() + "】记录信息验证没通过</font>";
}
#region
strBadData = string.Empty;
strBadData += "<div class=\"div_right_listtitle\">";
strBadData += "<div style=\"margin-left:15px;font-weight:bold;padding-top:7px;\">" + strAlert + "</div>";
strBadData += "</div>";
strBadData += "<table class='table_list' cellpadding='0' cellspacing='0' >";
strBadData += "<tr class='tr_title'>";
strBadData += "<td>内容一</td>";
strBadData += "<td>内容二</td>";
strBadData += "<td>错误提示</td>";
strBadData += "</tr>";
for (int i = 0; i < dr.Count(); i++)
{
strBadData += "<tr class='tr_con_001'>";
strBadData += "<td>" + dr[i]["内容一"] + "</td>";
strBadData += "<td>" + dr[i]["内容二"] + "</td>";
strBadData += "<td style='text-align:left;'>" + dr[i]["ErrorDate"] + "</td>";
strBadData += "</tr>";
}
strBadData += "</table>";
#endregion
return strBadData;
}
/// <summary>
/// 核对每一项的值
/// </summary>
/// <param name="dr"></param>
/// <param name="type"></param>
/// <param name="strErr"></param>
/// <returns></returns>
private bool CheckOption(DataRow dr, out string strErr)
{
bool bTemp = true;
strErr = string.Empty;
if (dr["内容一"].ToString().Trim() == "")
{
bTemp = false;
strErr += "内容一为空值<br>";
}
if (dr["内容二"].ToString().Trim() == "")
{
bTemp = false;
strErr += "内容二为空值<br>";
}
if (strErr.Length > 4)
{
strErr = strErr.Remove(strErr.Length - 4);
}
if (bTemp)
{
strErr = "正确";
}
return bTemp;
}
/// <summary>
/// 验证上传数据的模板结构
/// </summary>
/// <param name="ds"></param>
/// <param name="list"></param>
/// <param name="errorMessage"></param>
/// <returns></returns>
private bool CheckUploadDataStructure(DataSet ds, string strTitle, out string errorMessage)
{
if (ds.Tables[0].Columns.Count != strTitle.Split(',').Count())
{
errorMessage = "上传文件模板字段的个数不对应,请核对模板后重新上传";
return false;
}
List<string> listTemp = new List<string>();
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
if (ds.Tables[0].Columns[i].ColumnName.Trim().ToUpper() != strTitle.Split(',')[i].ToUpper())
{
errorMessage = "第【" + (i + 1) + "】个字段的名称与定义模板中的名称不一致,请修改后重新上传";
return false;
}
}
errorMessage = string.Empty;
return true;
}
/// <summary>
/// 验证上传的文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="errorMessage"></param>
/// <returns></returns>
private bool CheckFileName(string fileName, out string errorMessage)
{
if (fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower() != "xls")
{
errorMessage = "请选择后缀名为.xls的EXCEL文件上传";
return false;
}
errorMessage = string.Empty;
return true;
}
/// <summary>
/// 删除上传的文件
/// </summary>
private void DeleteInvoiceFile()
{
string serverPath = Server.MapPath("../Resources/UpFile/");
if (!Directory.Exists(serverPath))
{
Directory.CreateDirectory(serverPath);
}
foreach (string file in Directory.GetFiles(serverPath))
{
File.Delete(file);
}
}
#region Excel读取
private void GetExcelSchema(string filename, out OleDbConnection conn, out OleDbDataAdapter da, out System.Data.DataTable tblSchema, out IList<string> tblNames, string ifFirst, int i)
{
// 读取Excel数据,填充DataSet
// 连接字符串
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Extended Properties=\"Excel 8.0;HDR=" + ifFirst + ";IMEX=" + i + "\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
"data source=" + filename;
//string connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" +
// "Extended Properties=\"Excel 12.0 Xml;HDR=" + ifFirst + ";IMEX=" + i + "\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
// "data source=" + filename;
conn = null;
da = null;
tblSchema = null;
tblNames = null;
// 初始化连接,并打开
conn = new OleDbConnection(connStr);
conn.Open();
//获取数据源的表定义元数据
tblSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
conn.Close();
}
private static DataSet GetEachSheetContent(OleDbConnection conn, ref OleDbDataAdapter da, System.Data.DataTable tblSchema, ref IList<string> tblNames)
{
tblNames = new List<string>();
foreach (DataRow row in tblSchema.Rows)
{
string tableName = (string)row["TABLE_NAME"];
if (!tableName.StartsWith("_")) //skip system tables
{
tblNames.Add((string)row["TABLE_NAME"]); // 读取sheet名
}
}
//*********************************************************
// 初始化适配器
da = new OleDbDataAdapter();
// 准备数据,导入DataSet
DataSet ds = new DataSet();
string sql_F = "SELECT * FROM [{0}]";
string sheetName = "学生违纪记录信息$";
foreach (string tblName in tblNames)
{
if (tblNames.Count > 1 && !tblName.StartsWith(sheetName))
{
continue;
}
da.SelectCommand = new OleDbCommand(String.Format(sql_F, tblName), conn);
try
{
da.Fill(ds, tblName);
}
catch
{
// 关闭连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
throw;
}
}
// 关闭连接
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
return ds;
}
#endregion
/// <summary>
/// 用户事件 写入导入数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnImpRight_Click(object sender, EventArgs e)
{
InputExcelDataToDB();
}
protected void btnCancel_Click(object sender, EventArgs e)
{
excelData.Clear();
ShowHandel();
}
protected void btnBack_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(backurl))
{
Response.Redirect("内容显示页.aspx");
}
else
{
Response.Redirect(DESEncrypt.Decrypt(backurl));
}
}
PS:导入的模版要和strTempletTitle1 中内容个数相同,且内容类型相同