QQ:1187362408 欢迎技术交流和学习

数据导入(excel读取,存储进数据库【多表】),业务需求

TODO:

1,选择导入地区

2,数据校验:

(角色类别[1]:一个用户具有多角色     角色类别[2]:多用户单角色)

3,生成网格用户信息

讲解篇:1,服务端aspx,2,服务端后台3,前端javascript4,webservice返回数据(这里采用一般处理程序:handler.ashx.cs)

服务端aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="BaseInfoList.aspx.cs" Inherits="HMFW.Web.DataImport.BaseInfoList" %><%@ Register TagPrefix="uc1" TagName="uc_btnSelectArea" Src="~/UserControl/uc_btnSelectArea.ascx" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>数据导入基础表</title><script src="/Js/jquery-1.7.2.js" type="text/javascript"></script><script src="/Js/jquerytree/jquery.ztree.core-3.1.min.js" type="text/javascript"></script><link href="/Js/jquerytree/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" /><script src="/Js/jquery.easyui.min.js" type="text/javascript"></script><script src="/Js/jquery.form.js" type="text/javascript"></script><script src="/Js/jquery.validate.js" type="text/javascript"></script><link href="/themes/default/easyui.css" rel="stylesheet" type="text/css" /><link href="/themes/icon.css" rel="stylesheet" type="text/css" /><script src="/Js/jquery-loadmask-0.4/jquery.loadmask.min.js" type="text/javascript"></script><link href="/Js/jquery-loadmask-0.4/jquery.loadmask.css" rel="stylesheet" type="text/css" /><link href="/css/width.css" rel="stylesheet" type="text/css" /><script src="/Js/list.js" type="text/javascript"></script><script src="/Js/Common.js" type="text/javascript"></script><link href="/css/Common.css" rel="stylesheet" type="text/css" /><script src="BaseInfoList.js" type="text/javascript"></script><script type="text/javascript" src="/Js/swfupload/swfupload.js"></script><script type="text/javascript" src="/Js/swfupload/handlers.js"></script><script type="text/javascript">var swfu1; var swfu2;window.onload = function () {swfu1 = new SWFUpload({upload_url: "BaseInfoListHandler.ashx?action=fileupload",post_params: {"ASPSESSID": "\"" + $("#hidSessionID").val() + "\""},file_size_limit: "10 MB",file_types: "*.xls;*.xlsx",file_types_description: "EXCEL文件",file_upload_limit: 0,swfupload_preload_handler: preLoad,swfupload_load_failed_handler: loadFailed,file_queue_error_handler: fileQueueError,file_dialog_complete_handler: fileDialogComplete,upload_progress_handler: uploadProgress,upload_error_handler: uploadError,upload_success_handler: uploadFileSuccess,upload_complete_handler: uploadComplete,button_image_url: "/Js/swfupload/XPButtonNoText_160x22.png",button_placeholder_id: "spanButtonPlaceholder1",button_width: 66,button_height: 22,button_text: '<span class="button">   </span>',button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt;} .buttonSmall { font-size: 10pt; }',button_text_top_padding: 1,button_text_left_padding: 5,flash_url: "/Js/swfupload/swfupload.swf", // Relative to this fileflash9_url: "/Js/swfupload/swfupload_FP9.swf", // Relative to this filecustom_settings: {upload_target: "divFileProgressContainer"},debug: false});swfu2 = new SWFUpload({upload_url: "PeopleInfoListHandler.ashx?action=fileupload",post_params: {"ASPSESSID": "\"" + $("#hidSessionID").val() + "\""},file_size_limit: "10 MB",file_types: "*.xls;*.xlsx",file_types_description: "EXCEL文件",file_upload_limit: 0,swfupload_preload_handler: preLoad,swfupload_load_failed_handler: loadFailed,file_queue_error_handler: fileQueueError,file_dialog_complete_handler: fileDialogComplete,upload_progress_handler: uploadProgress,upload_error_handler: uploadError,upload_success_handler: uploadFileSuccess,upload_complete_handler: uploadComplete,button_image_url: "/Js/swfupload/XPButtonNoText_160x22.png",button_placeholder_id: "spanButtonPlaceholder2",button_width: 66,button_height: 22,button_text: '<span class="button">   </span>',button_text_style: '.button { font-family: Helvetica, Arial, sans-serif; font-size: 14pt;} .buttonSmall { font-size: 10pt; }',button_text_top_padding: 1,button_text_left_padding: 5,flash_url: "/Js/swfupload/swfupload.swf", // Relative to this fileflash9_url: "/Js/swfupload/swfupload_FP9.swf", // Relative to this filecustom_settings: {upload_target: "divFileProgressContainer"},debug: false});}$(function () {divHeight();//设置错误提示信息的Div的高度});///设置错误提示信息的Div的高度function divHeight() {var iHeight = $(this).height() - $("#div_action").height() - 20;$("#divError").height(iHeight);}</script></head>
<body><form id="form1" οnresize="divHeight();" runat="server"><div id="div_action" style="margin: 10px 0 0 0;"><table width="100%" border="0" cellspacing="0" class="findk"><tbody><tr align="left"><td align="right">模板下载:</td><td colspan="2"><a runat="server" id="WGdownload" style="text-decoration: none"><span style="font-weight: bolder; font-size: larger; color: red; margin-left: 10px;">社区网格信息模板下载</span></a></td><td class="d_hid"><a runat="server" id="RKdownload" style="text-decoration: none"><span style="font-weight: bolder; font-size: larger; color: red; margin-left: 10px;">社区人口信息模板下载</span></a></td><td><span style="font-weight: bolder; font-size: larger; color: red; margin-left: 10px;">门牌号显示图:格式【<label id="labMPH">ABc</label>】</span><%--<a runat="server" id="ZDdownload"><span class="xiazai"></span>字典对照表下载</a>--%></td></tr><tr align="left"><td align="right" style="width: 12%">第一步:</td><td align="left" style="width: 13%">选择导入地区</td><td style="width: 18%"></td><td rowspan="3"><asp:Image ID="imgMPH" runat="server" ImageUrl="../../Images/MPH/1ABc.jpg" /></td></tr><tr><td></td><td align="right"><div class="divnr-auto">地区:</div></td><td align="left"><uc1:uc_btnSelectArea ID="uc_btnSelectArea1" runat="server" SetSearchFunction="VillageContrlo()" ShowClearBtn="true" Width="153"CanSelParent="True" /></td></tr><tr><td align="right">第二步:</td><td align="left">导入基础信息数据</td><td></td></tr><tr><td></td><td align="right" nowrap><font color="red">*</font>文件上传(社区网格信息):</td><td align="left" nowrap style="height: 50px"><div style="float: left; width: 130px;"><asp:TextBox ID="txtimg1" ContentEditable="false" runat="server" class="srk001"></asp:TextBox></div><div id="divUpLoad1" style="float: left; width: 66px; z-index: -1; margin-top: 1px"><span id="spanButtonPlaceholder1"></span></div><br /><input type="hidden" id="FieldUrl1" runat="server" /></td><td align="left" width="10%" nowrap height="20"><div style="float: left; width: 50px;"><xhm:xhmButtionEasyUI ID="btn_Import1" runat="server" IconTypeSelected="save" OnClientClick="Import1();return false;">文件上传</xhm:xhmButtionEasyUI></div><div id="divWGUserMes" style="float: right; color: red; font-size: 13px; line-height: 18px; font-weight: 600;">提示:生成的网格用户请到【内网系统管理】--【用户管理】--【用户列表】<br />菜单里查看,所有用户初始密码为123,请及时修改密码!!!</div></td></tr><tr><td></td><td></td><td><div id="divMes" style="float: left; color: red; font-size: 13px; font-weight: 600; padding-top: 2px"></div></td><td colspan="3"><div class="datagrid-toolbar"><table><tr><td>  门牌号格式:<select id="ddl_sFormat" runat="server" class="xlk001"><option value="ABc">ABc</option><option value="ABC">ABC</option><option value="BCC">BCC</option><option value="A-Bcc">A-Bcc</option><option value="A-BCC">A-BCC</option><option value="A-B-C">A-B-C</option><option value="A-B-c">A-B-c</option></select></td><td><xhm:xhmLinkButtionEasyUI ID="btnValidate1" runat="server" Enabled="false" IconTypeSelected="dc"OnClientClick="return DataValidate1();">数据校验</xhm:xhmLinkButtionEasyUI></td><td><xhm:xhmLinkButtionEasyUI ID="btnInsertData1" runat="server" Enabled="false" IconTypeSelected="dc"OnClientClick="return ValidateBuild();">生成基础信息</xhm:xhmLinkButtionEasyUI></td><td><xhm:xhmLinkButtionEasyUI ID="btnCreateWGUser" runat="server" Enabled="false" IconTypeSelected="dc"OnClientClick="return IntelligentWGUser();">生成网格用户信息</xhm:xhmLinkButtionEasyUI></td></tr></table></div></td></tr><tr class="d_hid"><td align="right">第三步:</td><td align="left">导入人口信息数据</td><td></td><td></td></tr><tr class="d_hid"><td></td><td align="right" nowrap><font color="red">*</font>文件上传(社区人口信息):</td><td align="left" nowrap style="height: 50px"><div style="float: left; width: 130px;"><asp:TextBox ID="txtimg2" ContentEditable="false" runat="server" class="srk001"></asp:TextBox></div><div id="divUpLoad2" style="float: left; width: 66px; display: none; z-index: -1; margin-top: 1px"><span id="spanButtonPlaceholder2"></span></div><br /><%--<div style="float: left; padding-top: 2px"><font color="red">(文件不得超过10M)</font></div>--%><input type="hidden" id="FieldUrl2" runat="server" /></td><td align="left" width="10%" nowrap height="20"><xhm:xhmButtionEasyUI ID="btn_Import2" runat="server" IconTypeSelected="save" OnClientClick="Import2();return false;">文件上传</xhm:xhmButtionEasyUI></td></tr><tr class="d_hid"><td></td><td></td><td></td><td colspan="3"><div class="datagrid-toolbar"><table><tr><td><xhm:xhmLinkButtionEasyUI ID="btnValidate2" runat="server" Enabled="false" IconTypeSelected="dc"OnClientClick="DataValidate2();return false;">数据校验</xhm:xhmLinkButtionEasyUI></td><td><xhm:xhmLinkButtionEasyUI ID="btnInsertData2" runat="server" Enabled="false" IconTypeSelected="dc"OnClientClick="IntelligentImPort2();return false;">生成家庭人口信息</xhm:xhmLinkButtionEasyUI></td></tr></table></div></td></tr></tbody></table></div><div id="divError" style="font-size: 16px; overflow: auto;" class="error"></div><input type="hidden" runat="server" id="hidRandomID" /><input type="hidden" runat="server" id="hidMph" /></form>
</body>
</html>

服务端后台

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace HMFW.Web.DataImport
{public partial class BaseInfoList : BasePage{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){hidRandomID.Value = Guid.NewGuid().ToString();//页面导入数据标识,Guid}string action = GetParam("action");if (!IsPostBack && string.IsNullOrEmpty(action)){//XX社区实有人口信息采集模板string RKfilePath = Server.UrlEncode(Server.MapPath("/DocTemplate/社区人口信息采集模板.xls"));string RKresult = "BaseInfoList.aspx?action=xiazai&filepath=" + RKfilePath + "&filename=" + Server.UrlEncode("社区人口信息采集模板.xls");RKdownload.HRef = RKresult;//XX社区网格基础信息采集模板string WGfilePath = Server.UrlEncode(Server.MapPath("/DocTemplate/社区网格信息采集模板.xls"));string WGresult = "BaseInfoList.aspx?action=xiazai&filepath=" + WGfilePath + "&filename=" + Server.UrlEncode("社区网格信息采集模板.xls");WGdownload.HRef = WGresult;字典表//string ZDfilePath = Server.UrlEncode(Server.MapPath("/DocTemplate/字典对照表.xls"));//string ZDresult = "BaseInfoList.aspx?action=xiazai&filepath=" + ZDfilePath + "&filename=" + Server.UrlEncode("字典对照表.xls");//ZDdownload.HRef = ZDresult;}if (!string.IsNullOrEmpty(action))Download();}/// <summary>/// 下载事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>protected void Download(){//客户端保存的文件名string filePath = GetParam("filepath");string fileName = GetParam("filename");if (!System.IO.File.Exists((filePath))){Message("文件不存在!");return;}//以字符流的形式下载文件FileStream fs = new FileStream((filePath), FileMode.Open);if (fs.Length > 0){byte[] bytes = new byte[(int)fs.Length];fs.Read(bytes, 0, bytes.Length);fs.Close();Response.ContentType = "application/octet-stream";//通知浏览器下载文件而不是打开Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));Response.BinaryWrite(bytes);Response.Flush();Response.End();}else{Message("指定文件内容为空!");}}}
}

前端javascript

var handleurl1 = "BaseInfoListHandler.ashx"; //一般处理程序路径
var handleurl2 = "PeopleInfoListHandler.ashx"; //一般处理程序路径
var sVillageCode = "";//选择的地区编码
var sVillageName = "";//选择的地区名称
var sRandomID = "";//页面导入数据标识,Guid$(function () {$("#btn_Import2,#btnValidate1,#btnInsertData1,#btnCreateWGUser").attr("disabled", "disabled");///谷歌下Button禁用没用,以下方法针对无用的浏览器$("#btn_Import2,#btnValidate1,#btnInsertData1,#btnCreateWGUser").css("color", "gray").removeAttr("onclick");sRandomID = $("#hidRandomID").val();//页面导入数据标识,GuidsVillageCode = $("#uc_btnSelectArea1_hidAreaCode").val();//选择的地区编码///如果是社区,判断这个社区是否已导入基础数据,如已导入,进行控制不允许重复导入if (sVillageCode.length == 12) {///基础数据已导入,不允许重复导入if (ExistData(sVillageCode) == true) {$("#uc_btnSelectArea1_txtAreaName").attr("disabled", "disabled");//之后生成数据,地区不可变动 $("#uc_btnSelectArea1_imgselect,#uc_btnSelectArea1_imgclear").hide();//控制地区控件不可选$("#btn_Import1,#btnValidate1,#btnInsertData1,#txtimg1,#ddl_sFormat").attr("disabled", "disabled");$("#divUpLoad1").hide();$("#divUpLoad2").show();$("#btn_Import2").removeAttr("disabled");$("#divMes").html("基础数据已导入!");//请直接导入人口信息!");//if (ExistWGUser(sVillageCode) == true) {//验证网格用户是否已生成//    $("#btnCreateWGUser").attr("disabled", "disabled");//生成网格用户按钮不可用//    //去用户管理查看已生成的网格用户//    $("#divWGUserMes").html("提示:生成的网格用户请到【内网系统管理】--【用户管理】--【用户列表】<br/>菜单里查看,所有用户初始密码为123,请及时修改密码!!!");//}return false;}}if (sVillageCode.length == 12) {VillageContrlo();}$("#ddl_sFormat").change(function () {setMph(this.value);});
});function setMph(value) {$("#labMPH").text(value);var iIndex = $("#ddl_sFormat option:selected").index();$("#imgMPH").attr("src", "../../Images/MPH/" + Number(iIndex + 1) + value + ".jpg");
}///如果是社区,判断这个社区是否已导入基础数据,如已导入,进行控制不允许重复导入
function VillageContrlo() {sVillageCode = $("#uc_btnSelectArea1_hidAreaCode").val();//选择的地区编码if (sVillageCode.length == 12) {///基础数据已导入,不允许重复导入if (ExistData(sVillageCode) == true) {$("#btn_Import1,#btnValidate1,#btnInsertData1,#txtimg1,#ddl_sFormat").attr("disabled", "disabled");$("#divUpLoad1").hide();$("#divUpLoad2").show();$("#btn_Import2").removeAttr("disabled");$("#divMes").html("基础数据已导入!");//请直接导入人口信息!");var value = $("#hidMph").val();$("#ddl_sFormat").val(value);setMph(value);//if (ExistWGUser(sVillageCode) == true) {//验证网格用户是否已生成//    $("#btnCreateWGUser").attr("disabled", "disabled");//生成网格用户按钮不可用//    //去用户管理查看已生成的网格用户//    $("#divWGUserMes").html("提示:生成的网格用户请到【内网系统管理】--【用户管理】--【用户列表】<br/>菜单里查看,所有用户初始密码为123,请及时修改密码!!!");//}return false;} else {$("#btn_Import1,#txtimg1,#ddl_sFormat").removeAttr("disabled");$("#divUpLoad1").show();$("#divUpLoad2").hide();$("#btn_Import2").attr("disabled", "disabled");$("#divMes").html("");$("#ddl_sFormat").val("ABc");setMph("ABc");return false;}}
}///确定导入----基础信息
function Import1() {sVillageCode = $("#uc_btnSelectArea1_hidAreaCode").val();//选择的地区编码sVillageName = $("#uc_btnSelectArea1_txtAreaName").val();//选择的地区名称if ($.trim(sVillageCode).length != 12) {//判断地区是否选择到社区$.messager.alert('信息', "地区请选择到社区!", 'info');return false;}///判断基础数据是否已导入,已导入,不允许重复导入if (ExistData(sVillageCode) == true) {$.messager.alert('信息', sVillageName + "已导入基础数据,不能重复导入!如需重新导入,请联系管理员进行删除数据!", 'info');return false;}if ($("#txtimg1").val() == "") {//判断是否上传了文件$.messager.alert('信息', "请选择上传文件!", 'info');return false;}var data = "action=inexport&filePath=" + $("#FieldUrl1").val() + "&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl1,data: data,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {if (returnJsonValue.result == true) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息$("#btnValidate1").removeAttr("disabled").css("color", "").attr("onclick", "return DataValidate1();");//数据验证按钮可用$("#uc_btnSelectArea1_txtAreaName").attr("disabled", "disabled");//之后生成数据,地区不可变动 $("#uc_btnSelectArea1_imgselect,#uc_btnSelectArea1_imgclear").hide();//控制地区控件不可选$("#divError").empty();//清空错误结果提示信息【针对重新导入,之前导入错误的】}else {$.messager.alert('信息', "数据校验失败!详细信息请查看校验结果!", 'info'); //弹出消息$("#divError").empty().html(returnJsonValue.data);//.show();$("#btnInsertData1,#btnCreateWGUser").attr("disabled", "disabled");//生成基础信息按钮不可用///谷歌下Button禁用没用,以下方法针对无用的浏览器$("#btnInsertData1,#btnCreateWGUser").css("color", "gray").removeAttr("onclick");}$("#btnValidate2").attr("disabled", "disabled");//数据验证按钮不可用$("#btnInsertData2").attr("disabled", "disabled");//生成家庭人口信息按钮不可用},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///是否已存在数据,导入基础数据之前验证当时社区的基础数据是否已导入,存在 true  不存在 false
function ExistData(sVillageCode) {var result = false;var data = "action=existdata&sVillageCode=" + sVillageCode;$.ajax({type: "POST",url: handleurl1,data: data,async: false,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', "Error:" + xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {result = returnJsonValue.result;$("#hidMph").val(returnJsonValue.ID);}});return result;
}///是否已存在数据,导入基础数据之前验证当时社区的基础数据是否已导入,存在 true  不存在 false
function ExistWGUser(sVillageCode) {var result = false;var data = "action=existwguser&sVillageCode=" + sVillageCode;$.ajax({type: "POST",url: handleurl1,data: data,async: false,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', "Error:" + xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {result = returnJsonValue.result;}});return result;
}///数据校验----基础信息
function DataValidate1() {var data = "action=datavalidate&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl1,data: data,async: false,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', "Error:" + xmlHttpRequest.responseText, 'error');$("#divError").empty().html(xmlHttpRequest.responseText);//.show();},success: function (returnJsonValue) {if (returnJsonValue.result == true) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息$("#btnInsertData1").removeAttr("disabled").css("color", "").attr("onclick", "return ValidateBuild();");;//生成基础数据按钮可用  $("#divError").empty();//清空错误结果提示信息}else {$.messager.alert('信息', "数据校验失败!详细信息请查看校验结果!", 'info'); //弹出消息$("#divError").empty().html(returnJsonValue.data);//.show();$("#btnInsertData1,#btnCreateWGUser").attr("disabled", "disabled");//生成基础信息按钮不可用///谷歌下Button禁用没用,以下方法针对无用的浏览器$("#btnInsertData1,#btnCreateWGUser").css("color", "gray").removeAttr("onclick");}},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///验证楼层是否有大于33层的,大于33层进行信息提示,是否确定生成基础信息
function ValidateBuild() {var result = true;var data = "action=validatebuild&sVillageCode=" + sVillageCode;$.ajax({type: "POST",url: handleurl1,data: data,async: false,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', "Error:" + xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {if (returnJsonValue.result == true) {IntelligentImPort1();}else {var strMes = returnJsonValue.data;$.messager.confirm('数据提示', '<div style="margin-top:0px;line-height:22px">' + strMes, function (data) {if (data) {IntelligentImPort1();}});}}});return result;
}///一键导入网格小区楼栋并生成房屋----基础信息
function IntelligentImPort1() {///判断基础数据是否已导入,已导入,不允许重复导入if (ExistData(sVillageCode) == true) {$.messager.alert('信息', sVillageName + "已导入基础数据,不能重复导入!如需重新导入,请联系管理员进行删除数据!", 'info');return false;}var sFormat = $("#ddl_sFormat").val();var data = "action=intelligentimport&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sFormat=" + sFormat + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl1,data: data,dataType: "json",async: false,error: function (xmlHttpRequest) {$.messager.alert('错误', xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息if (returnJsonValue.result == true) {$("#btn_Import1,#btnValidate1,#btnInsertData1,#txtimg1,#ddl_sFormat").attr("disabled", "disabled");$("#divUpLoad1").hide();$("#divUpLoad2").show();$("#btn_Import2").removeAttr("disabled");$("#btnCreateWGUser").removeAttr("disabled").css("color", "").attr("onclick", "return IntelligentWGUser();");;//生成网格用户信息}},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///一键生成网格用户信息:默认密码 123
function IntelligentWGUser() {var data = "action=intelligentwguser&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl1,data: data,dataType: "json",async: false,error: function (xmlHttpRequest) {$.messager.alert('错误', xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息if (returnJsonValue.result == true) {$("#btn_Import1,#btnValidate1,#btnInsertData1,#txtimg1,#ddl_sFormat,#btnCreateWGUser").attr("disabled", "disabled");$("#divUpLoad1").hide();$("#divUpLoad2").show();$("#btn_Import2").removeAttr("disabled");Add_2("/Pages/UserRoleManage/UserList.aspx", "sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&iUserType=2", 600, 600, false);//跳转用户管理界面}},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///确定导入----人口信息
function Import2() {sVillageCode = $("#uc_btnSelectArea1_hidAreaCode").val();//选择的地区编码sVillageName = $("#uc_btnSelectArea1_txtAreaName").val();//选择的地区名称if ($("#txtimg2").val() == "") {//判断是否上传了文件$.messager.alert('信息', "请上传文件!", 'info');return false;}var data = "action=inexport&filePath=" + $("#FieldUrl2").val() + "&sRandomID=" + sRandomID + "&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName;$.ajax({type: "POST",url: handleurl2,data: data,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {if (returnJsonValue.result == true) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息$("#btnValidate2").removeAttr("disabled");//数据验证按钮可用$("#divError").empty();//清空错误结果提示信息}else {$.messager.alert('信息', "数据校验失败!详细信息请查看校验结果!", 'info'); //弹出消息$("#divError").empty().html(returnJsonValue.data);//.show();$("#btnInsertData2").attr("disabled", "disabled");//生成家庭人口信息按钮不可用}},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///数据校验----人口信息
function DataValidate2() {var data = "action=datavalidate&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl2,data: data,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', "Error:数据校验失败!详细信息请查看校验结果!", 'error');$("#divError").empty().html(xmlHttpRequest.responseText);//.show();},success: function (returnJsonValue) {if (returnJsonValue.result == true) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息$("#btnInsertData2").removeAttr("disabled");//生成家庭人口信息按钮可用$("#divError").empty();//清空错误结果提示信息}else {$.messager.alert('信息', "数据校验失败!详细信息请查看校验结果!", 'info'); //弹出消息$("#divError").empty().html(returnJsonValue.data);//.show();$("#btnInsertData2").attr("disabled", "disabled");//生成家庭人口信息按钮不可用}},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}///导入家庭、人口信息
function IntelligentImPort2() {var data = "action=intelligentimport&sVillageCode=" + sVillageCode + "&sVillageName=" + sVillageName + "&sRandomID=" + sRandomID;$.ajax({type: "POST",url: handleurl2,data: data,dataType: "json",error: function (xmlHttpRequest) {$.messager.alert('错误', xmlHttpRequest.responseText, 'error');},success: function (returnJsonValue) {$.messager.alert('信息', returnJsonValue.data, 'info'); //弹出消息$("#btnValidate2").attr("disabled", "disabled");//数据验证按钮不可用$("#btnInsertData2").attr("disabled", "disabled");//生成家庭人口信息按钮不可用},beforeSend: function () {$("body").mask("数据处理中,请稍候...");},complete: function () {$("body").unmask();}});return false;
}

webservice返回数据(这里采用一般处理程序:handler.ashx.cs)

BaseInfoListHandler

using HMFW.BLL.UserRoleManage;
using HMFW.Common;
using HMFW.Model;
using HMFW.SQLServerDAL;
using HMFW.Web.App_Code;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;namespace HMFW.Web.DataImport
{/// <summary>/// BaseInfoListHandler 的摘要说明/// </summary>public class BaseInfoListHandler : BaseHandler{UsersBLL userBll = new UsersBLL();protected override void ActionHandler(string action){switch (action.ToLower()){case "fileupload"://上传社区导入数据UploadFile();break;case "existdata"://验证基础数据是否已导入ExistData();break;case "inexport"://读取Excel并插入数据到临时表ReadExcel();break;case "datavalidate"://数据校验DataValidate();break;case "validatebuild"://验证楼层ValidateBuild();break;case "intelligentimport"://一键导入网格小区楼栋IntelligentImPort();break;case "existwguser"://验证网格用户是否已导入ExistWGUser();break;case "intelligentwguser"://一键生成网格用户信息IntelligentWGUser();break;default:break;}}#region 文件上传/// <summary>/// 文件上传/// </summary>private void UploadFile(){string pathPrefix = "/upload/DataImport/BaseInfo/";try{HttpPostedFile file = _context.Request.Files["Filedata"];if (file == null || file.ContentLength == 0)throw new ArgumentOutOfRangeException("没有文件需要上传或文件过小!");if (file.ContentLength > 10000000)throw new ArgumentOutOfRangeException(string.Format("所上传的文件大小{0}字节超过指定大小{1}字节!", file.ContentLength, 10000000));string[] strings = file.FileName.Split('.');string path = Path.Combine(pathPrefix,DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond + "." +strings[strings.Length - 1]);string sbst;try{sbst = HttpContext.Current.Server.MapPath(path);}catch{sbst = path;}FileInfo fileInfo = new FileInfo(sbst);if (!fileInfo.Directory.Exists)fileInfo.Directory.Create();file.SaveAs(sbst);_context.Response.StatusCode = 200;_context.Response.Write(path);}catch{// If any kind of error occurs return a 500 Internal Server error_context.Response.StatusCode = 500;_context.Response.Write("An error occured");_context.Response.End();}finally{_context.Response.End();}}#endregion#region 验证基础数据是否已导入/// <summary>/// 验证基础数据是否已导入/// </summary>private void ExistData(){bool bResult = false;string sMes = "验证成功!";string mph = "ABc";string sVillageCode = GetParam("sVillageCode");string sVillageName = GetParam("sVillageName");string strDelSQL = "select * from _SQ_DataImportLog where sVillageCode='" + sVillageCode + "' and iType=1";DataTable dtBaseData = SqlHelper.ExecuteSqlToTable(strDelSQL);if (dtBaseData.Rows.Count > 0){bResult = true;sMes = "基础数据已导入,不允许重复导入!";mph = dtBaseData.Rows[0]["sFormat"].ToString();}OutputResultCarryID(bResult, sMes, mph);}#endregion#region 验证网格用户是否已生成/// <summary>/// 验证网格用户是否已生成/// </summary>private void ExistWGUser(){bool bResult = false;string sMes = "验证成功!";string sVillageCode = GetParam("sVillageCode");string sVillageName = GetParam("sVillageName");string strDelSQL = "select * from _SQ_DataImportLog where sVillageCode='" + sVillageCode + "' and iType=3";DataTable dtBaseData = SqlHelper.ExecuteSqlToTable(strDelSQL);if (dtBaseData.Rows.Count > 0){bResult = true;//sMes = "网格用户已生成,不允许重复生成!";}OutputResult(bResult, sMes);}#endregion#region Excel数据导入数据库/// <summary>/// Excel数据导入数据库/// </summary>private void ReadExcel(){string sVillageCode = GetParam("sVillageCode");string sVillageName = GetParam("sVillageName");string sFileName = GetParam("filePath");string sRandomID = GetParam("sRandomID");//页面导入数据标识,Guidstring connStr = "";string fileType = System.IO.Path.GetExtension(sFileName);if (string.IsNullOrEmpty(fileType)){Output("请选择需要导入的文件!");}sFileName = _context.Server.MapPath(sFileName);if (fileType == ".xls")connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + sFileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";elseconnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + sFileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";string sql_F = "Select * FROM [{0}]";DataTable dtResult = new DataTable();OleDbConnection conn = null;OleDbDataAdapter da = null;DataTable dtSheetName = null;bool resul = true;string Mes = "上传成功!";//bool bWGUpdate = true;//网格编码更新//bool bHomeBuildUpdate = true;//小区楼栋更新try{// 初始化连接,并打开conn = new OleDbConnection(connStr);conn.Open();// 获取数据源的表定义元数据                        string SheetName = "";dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });// 初始化适配器da = new OleDbDataAdapter();//SheetName = (string)dtSheetName.Rows[0]["TABLE_NAME"];for (int i = 0; i < dtSheetName.Rows.Count; i++){SheetName += dtSheetName.Rows[i]["TABLE_NAME"].ToString();}if (SheetName.Contains("社区网格信息$")){da.SelectCommand = new OleDbCommand(String.Format(sql_F, "社区网格信息$"), conn);da.Fill(dtResult);removeEmpty(dtResult);//去除DataTable空行string errMes = "";if (!CheckRule(dtResult, out errMes, sVillageName)){resul = false;Mes = errMes;}else{string strDelSQL = "delete from _SQ_Excel_BaseInfo where 地区编码='" + sVillageCode + "'";SqlHelper.ExecuteSql(strDelSQL);foreach (DataRow r in dtResult.Rows){if (!string.IsNullOrEmpty(r[0].ToString().Trim()) && r[0].ToString() != "序号"){if (!(r[0].ToString().Contains("说明") || r[0].ToString().Contains("必填项") || r[0].ToString().Contains("规则") || r[0].ToString().Contains("例如") || r[0].ToString().Contains("导入"))){string strSQL = "insert into _SQ_Excel_BaseInfo(楼栋主键,地区名称,地区编码,序号,社区名称,网格名称,小区名称,楼栋名称,总层数,负层数,单元数,每单元每层户数,单元户数,不生成的门牌号,商品房,车库,备注,sRandomID)values(NEWID(),'" +sVillageName + "','" + sVillageCode + "','" + r[0] + "','" + r[1] + "','" + r[2] + "','" + r[3] + "','" + r[4] + "','" + r[5] + "','" + r[6] + "','" + r[7] + "','" + r[8] + "','" + r[9] + "','" + r[10] + "','" + r[11] + "','" + r[12] + "','" + r[13] + "','" + sRandomID + "')";SqlHelper.ExecuteSql(strSQL);}}}SqlParameter[] paraList = new SqlParameter[]{new SqlParameter("@sAreaCode",sVillageCode)};SqlHelper.ExecuteStoredProcedure("proc_StripBaseInfoSpaces", paraList);}}else{resul = false;Mes = "导入失败!Excel中不包含名称为“社区网格信息”的工作薄!";}}catch (Exception ex){resul = false;Mes = "导入失败!请联系管理员!";}finally{// 关闭连接if (conn.State == ConnectionState.Open){conn.Close();da.Dispose();conn.Dispose();}}OutputResult(resul, Mes);}#endregion#region 数据校验/// <summary>/// 数据校验/// </summary>private void DataValidate(){bool bCheckResult = true;string mes = "";string sVillageCode = GetParam("sVillageCode");//地区控件选择的导入数据的地区---编码string sVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称//string sRandomID = GetParam("sRandomID");//页面导入数据标识,Guidstring[] strArray = { "第一网格", "第二网格", "第三网格", "第四网格", "第五网格", "第六网格", "第七网格", "第八网格", "第九网格","第十网格", "第十一网格", "第十二网格", "第十三网格", "第十四网格", "第十五网格", "第十六网格", "第十七网格","第十八网格", "第十九网格", "第二十网格","第二十一网格","第二十二网格","第二十三网格","第二十四网格","第二十五网格","第二十六网格","第二十七网格","第二十八网格","第二十九网格","第三十网格"};List<string> wgList = new List<string>();wgList.AddRange(strArray);string strCheck = "SELECT * FROM _SQ_Excel_BaseInfo  WHERE  [地区编码] = '" + sVillageCode + "' order by [序号]";DataTable dtCheck = SqlHelper.ExecuteSqlToTable(strCheck);string rowNum;//序号string rowVillageName;//社区名称int intNum = 0;//是否数字的转换out参数 for (int i = 0; i < dtCheck.Rows.Count; i++)//遍历Table行{rowNum = dtCheck.Rows[i]["序号"].ToString().Trim();rowVillageName = dtCheck.Rows[i]["社区名称"].ToString().Trim();//dtCheck.Rows[i][1].ToString().Trim();#region 不能为空判断,数据合法性验证if (rowNum == "")//行号{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“序号”数据列不能为空!</br>";}else if (!int.TryParse(rowNum, out intNum)){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“序号”数据列必须为正整数!序号:【" + rowNum + "】</br>";}if (dtCheck.Rows[i]["社区名称"].ToString().Trim() == "")//社区名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“社区名称”数据列不能为空!</br>";}if (dtCheck.Rows[i]["网格名称"].ToString().Trim() == "")//网格名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“网格名称”数据列不能为空!</br>";}else//网格名称不为空,必须为一定的格式【第一网格】{string wgName = dtCheck.Rows[i]["网格名称"].ToString().Trim();bool result = wgList.Contains(wgName);if (!result){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“网格名称”数据列必须按规定的格式填写!例如:第一网格、第十二网格!</br>";}}if (dtCheck.Rows[i]["小区名称"].ToString().Trim() == "")//小区名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“小区名称”数据列不能为空!</br>";}if (dtCheck.Rows[i]["楼栋名称"].ToString().Trim() == "")//楼栋名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“楼栋名称”数据列不能为空!</br>";}if (dtCheck.Rows[i]["总层数"].ToString().Trim() == "")//总层数{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“总层数”数据列不能为空!</br>";}else{if (!int.TryParse(dtCheck.Rows[i]["总层数"].ToString().Trim(), out intNum)){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“总层数”数据列必须为正整数!总层数:【" + dtCheck.Rows[i]["总层数"].ToString().Trim() + "】</br>";}else if (int.Parse(dtCheck.Rows[i]["总层数"].ToString().Trim()) == 0){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“总层数”数据列不能为0!</br>";}}if (dtCheck.Rows[i]["负层数"].ToString().Trim() != "")//负层数{if (!int.TryParse(dtCheck.Rows[i]["负层数"].ToString().Trim(), out intNum)){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“负层数”数据列必须为正整数!负层数:【" + dtCheck.Rows[i]["负层数"].ToString().Trim() + "】</br>";}}if (dtCheck.Rows[i]["单元数"].ToString().Trim() == "")//单元数{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“单元数”数据列不能为空!</br>";}else{if (!int.TryParse(dtCheck.Rows[i]["单元数"].ToString().Trim(), out intNum)){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“单元数”数据列必须为正整数!单元数:【" + dtCheck.Rows[i]["单元数"].ToString().Trim() + "】</br>";}else if (int.Parse(dtCheck.Rows[i]["单元数"].ToString().Trim()) == 0){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“单元数”数据列不能为0!</br>";}}if (dtCheck.Rows[i]["每单元每层户数"].ToString().Trim() == "")//每单元每层户数{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“每单元每层户数”数据列不能为空!</br>";}else{if (!int.TryParse(dtCheck.Rows[i]["每单元每层户数"].ToString().Trim(), out intNum)){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“每单元每层户数”数据列必须为正整数!每单元每层户数:【" + dtCheck.Rows[i]["每单元每层户数"].ToString().Trim() + "】</br>";}else if (int.Parse(dtCheck.Rows[i]["每单元每层户数"].ToString().Trim()) == 0){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:“每单元每层户数”数据列不能为0!</br>";}}#endregionif (rowVillageName != sVillageName)//判断社区名称是否与导入地区相同{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:Excel里的“社区名称”为【" + rowVillageName + "】,与所选的导入地区名称【" + sVillageName + "】不符!</br>";}}///检验同一个小区下是否有二个相同的楼栋名称string strBuildCheck = "SELECT  [小区名称],[楼栋名称] FROM _SQ_Excel_BaseInfo  WHERE  [地区编码] = '" + sVillageCode + "' group by 小区名称,楼栋名称 having COUNT(1)>1";DataTable dtBuildCheck = SqlHelper.ExecuteSqlToTable(strBuildCheck);if (dtBuildCheck.Rows.Count > 0){bCheckResult = false;for (int i = 0; i < dtBuildCheck.Rows.Count; i++){string strRepeatBuild = "SELECT * FROM _SQ_Excel_BaseInfo WHERE  [地区编码] = '" + sVillageCode + "' AND 小区名称='" + dtBuildCheck.Rows[i]["小区名称"] + "' AND 楼栋名称='" + dtBuildCheck.Rows[i]["楼栋名称"] + "'";DataTable dtRepeatBuild = SqlHelper.ExecuteSqlToTable(strRepeatBuild);for (int j = 0; j < dtRepeatBuild.Rows.Count; j++){rowNum = dtRepeatBuild.Rows[j]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:同一小区下楼栋重复!小区名称:【" + dtRepeatBuild.Rows[j]["小区名称"] + "】---楼栋名称:【" + dtRepeatBuild.Rows[j]["楼栋名称"] + "】<br/>";}}}///检验:如果维护了单元户数,维护的数组长度是否与单元数一一对应string strCSCheck = "select 序号,小区名称,楼栋名称,总层数,负层数,单元数,每单元每层户数,单元户数 from _SQ_Excel_BaseInfo WHERE  [地区编码] = '" + sVillageCode + "'";DataTable dtCSCheck = SqlHelper.ExecuteSqlToTable(strCSCheck);for (int i = 0; i < dtCSCheck.Rows.Count; i++){rowNum = dtCSCheck.Rows[i]["序号"].ToString().Trim();//序号if (ToInt(dtCSCheck.Rows[i]["负层数"].ToString()) > ToInt(dtCSCheck.Rows[i]["总层数"].ToString())){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:负层数不能大于总层数!负层数:【" + dtCSCheck.Rows[i]["负层数"] + "】---总层数:【" + dtCSCheck.Rows[i]["总层数"] + "】<br/>";}if (dtCSCheck.Rows[i]["单元户数"].ToString() != "" && dtCSCheck.Rows[i]["单元户数"] != null){string[] dyhs = dtCSCheck.Rows[i]["单元户数"].ToString().Replace(",", ",").TrimEnd(',').Split(',');if (dyhs.Length != ToInt(dtCSCheck.Rows[i]["单元数"].ToString())){bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:单元户数维护的数量需要同单元数一致!单元数:【" + dtCSCheck.Rows[i]["单元数"] + "】---单元户数:【" + dtCSCheck.Rows[i]["单元户数"] + "】<br/>";}}}if (mes == ""){mes = "数据校验成功!";}OutputResult(bCheckResult, mes);}#endregion#region 楼层验证private void ValidateBuild(){string sVillageCode = GetParam("sVillageCode");//地区控件选择的导入数据的地区---编码string sVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称bool result = true;string mes = "";string strBuildSQL = "select 序号,楼栋主键,小区编码,小区名称,楼栋编码,楼栋名称,总层数,负层数,单元数,单元户数,每单元每层户数,不生成的门牌号,商品房,车库 from _SQ_Excel_BaseInfo where 地区编码 ='" + sVillageCode + "' and 总层数>33 order by 楼栋编码";DataTable dtBuild = SqlHelper.ExecuteSqlToTable(strBuildSQL);for (int i = 0; i < dtBuild.Rows.Count; i++){result = false;string rowNum = dtBuild.Rows[i]["序号"].ToString().Trim();if (i > 1){mes += "                ";}mes += "序号【" + rowNum + "】,总层数为【" + dtBuild.Rows[i]["总层数"].ToString().Trim() + "】</br>";}if (mes != ""){mes += "                ";mes += "是否确定生成基础信息?";}OutputResult(result, mes);}#endregion#region 一键导入网格小区楼栋/// <summary>/// 一键导入网格小区楼栋/// </summary>private void IntelligentImPort(){bool bInitResult = true;bool bWGUpdate = true;bool bHomeBuildUpdate = true;string mes = "基础数据生成成功!";string sFormat = GetParam("sFormat");//门牌号格式string sVillageCode = GetParam("sVillageCode");//社区编码 string sVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称//string sRandomID = GetParam("sRandomID");//页面导入数据标识,Guid bWGUpdate = UpdateWGCode(sVillageCode);bHomeBuildUpdate = UpdateHomeBuildCode(sVillageCode);List<string> sqlList = new List<string>();//执行语句List<SqlParameter[]> paraList = new List<SqlParameter[]>();//执行语句相对应的参数#region 生成导入网格信息SQLstring strWGSQL = "select distinct 地区编码,地区名称,网格编码,网格名称 from _SQ_Excel_BaseInfo where 地区编码='" + sVillageCode + "' order by 网格编码";DataTable dtWG = SqlHelper.ExecuteSqlToTable(strWGSQL);string strInsertSQL = "insert into SQ_WGInfo(gID,sVillageCode,sCode,sName,iDeleteMark,iSort,dCreateDate,sCreateUserRealname) values(NEWID(),@sWGVillageCode,@sWGCode,@sWGName,0,0,getdate(),'数据导入')";int iWGRows = dtWG.Rows.Count;for (int i = 0; i < iWGRows; i++){string sWGVillageCode = dtWG.Rows[i]["地区编码"].ToString();string sWGCode = dtWG.Rows[i]["网格编码"].ToString();string sWGName = dtWG.Rows[i]["网格名称"].ToString();sqlList.Add(strInsertSQL);paraList.Add(new SqlParameter[] { new SqlParameter("@sWGVillageCode", sWGVillageCode),new SqlParameter("@sWGCode", sWGCode),new SqlParameter("@sWGName", sWGName)});}#endregion#region 生成导入小区信息SQLstring strHomeSQL = "select distinct 地区编码,地区名称,小区编码,小区名称 from _SQ_Excel_BaseInfo where 地区编码='" + sVillageCode + "' order by 小区编码";DataTable dtHome = SqlHelper.ExecuteSqlToTable(strHomeSQL);string strInsertHomeSQL = "insert into SQ_Homes(gID,sVillageCode,sHomeCode,sHomeName,iDeleteMark,iSort,dCreateDate,sCreateUserRealname) values(NEWID(),@sHomeVillageCode,@sHomeCode,@sHomeName,0,0,getdate(),'数据导入')";int iHomeRows = dtHome.Rows.Count;for (int i = 0; i < iHomeRows; i++){string sHomeVillageCode = dtHome.Rows[i]["地区编码"].ToString();string sHomeCode = dtHome.Rows[i]["小区编码"].ToString();string sHomeName = dtHome.Rows[i]["小区名称"].ToString();sqlList.Add(strInsertHomeSQL);paraList.Add(new SqlParameter[]{new SqlParameter("@sHomeVillageCode",sHomeVillageCode),new SqlParameter("@sHomeCode",sHomeCode),new SqlParameter("@sHomeName",sHomeName),});}#endregion#region 生成导入楼栋信息SQLstring strBuildSQL = "select 楼栋主键,小区编码,小区名称,楼栋编码,楼栋名称,总层数,负层数,单元数,单元户数,每单元每层户数,不生成的门牌号,商品房,车库 from _SQ_Excel_BaseInfo where 地区编码 ='" + sVillageCode + "' order by 楼栋编码";DataTable dtBuild = SqlHelper.ExecuteSqlToTable(strBuildSQL);string strInsertBuildSQL = "insert into SQ_Build(gID,sBuildCode,sBuildName,sHomeCode,iCS,iFCS,iFWS,iDYS,sFWLX,sImage,iDeleteMark,iSort,dCreateDate,sCreateUserRealname,FW_DY,fXpoint,fYpoint,fWGXpoint,fWGYpoint,BdXpoint,BdYpoint,sFormat) ";strInsertBuildSQL += "values(@sBuildKey,@sBuildCode,@sBuildName,@sBuildHomeCode,@CS,@FCS,@FWS,@DYS,'02',@sImage,0,0,getdate(),'数据导入',@FW_DY,'0','0','0','0','0','0',@sFormat) ";string strInsertWGLDGLBSQL = "insert into SQ_WGLDGLB(gID,gWGID,sBuildCode,iDeleteMark,iSort,dCreateDate,sCreateUserRealname) values(NEWID(),NEWID(),@sBuildCode,0,0,getdate(),'数据导入')";int iBuildRows = dtBuild.Rows.Count;for (int i = 0; i < iBuildRows; i++){string sBuildKey = dtBuild.Rows[i]["楼栋主键"].ToString();//楼栋主键string sBuildCode = dtBuild.Rows[i]["楼栋编码"].ToString();//楼栋编码string sBuildName = dtBuild.Rows[i]["楼栋名称"].ToString();//楼栋名称string sBuildHomeCode = dtBuild.Rows[i]["小区编码"].ToString();//小区编码string CS = dtBuild.Rows[i]["总层数"].ToString();//总层数string FCS = dtBuild.Rows[i]["负层数"].ToString();//负层数string FWS = dtBuild.Rows[i]["每单元每层户数"].ToString();//每单元每层户数string DYS = dtBuild.Rows[i]["单元数"].ToString();//单元数string FW_DY = dtBuild.Rows[i]["单元户数"].ToString().Replace(",", ",");//单元户数//根据层数,单位数,户数自动生成相应的图片string sImage = GetHomeImage(CS, DYS);//楼栋图片sqlList.Add(strInsertBuildSQL);paraList.Add(new SqlParameter[]{new SqlParameter("@sBuildKey",sBuildKey),new SqlParameter("@sBuildCode",sBuildCode),new SqlParameter("@sBuildName",sBuildName),new SqlParameter("@sBuildHomeCode",sBuildHomeCode),new SqlParameter("@CS",CS),new SqlParameter("@FCS",FCS),new SqlParameter("@FWS",FWS),new SqlParameter("@DYS",DYS),new SqlParameter("@sImage",sImage),new SqlParameter("@FW_DY",FW_DY),new SqlParameter("@sFormat",sFormat)});sqlList.Add(strInsertWGLDGLBSQL);paraList.Add(new SqlParameter[]{new SqlParameter("@sBuildCode",sBuildCode)});}string strUpdateWGLDGLBSQL = "update SQ_WGLDGLB set gWGID=(select gID from SQ_WGInfo w join _SQ_Excel_BaseInfo b on w.sCode=b.网格编码 and SQ_WGLDGLB.sBuildCode=b.楼栋编码 ) where sBuildCode like @sVillageCode";sqlList.Add(strUpdateWGLDGLBSQL);string paraVillageCode = sVillageCode + "%";paraList.Add(new SqlParameter[]{new SqlParameter("@sVillageCode",paraVillageCode)});#endregion#region 更新网格楼栋坐标(排列楼栋)string strWGInfoSQL = "select gID from SQ_WGInfo where sVillageCode='" + sVillageCode + "' order by sCode";DataTable dtWGInfo = SqlHelper.ExecuteSqlToTable(strWGInfoSQL);for (int i = 0; i < dtWGInfo.Rows.Count; i++){string sWgID = dtWGInfo.Rows[i]["gID"].ToString();//网格主键string strWGBuild = "select B.gID from SQ_Build B left join SQ_WGLDGLB G on B.sBuildCode = G.sBuildCode where gWGID = '" + sWgID + "' order by B.sBuildCode";DataTable dtWGBuild = SqlHelper.ExecuteSqlToTable(strWGBuild);//网格下的所有楼栋List<string> listUpdatePoint = new List<string>();//更新坐标语句集合for (int k = 1; k <= dtWGBuild.Rows.Count; k++){string sBuildID = dtWGBuild.Rows[k - 1]["gID"].ToString();//楼栋主键int xPoint = 76 + 107 * ((k - 1) % 6);//X轴坐标位置int yPoint = 64 + 97 * (k / 6);//Y轴坐标位置string strUpdatePoint = "update SQ_Build set fWGXpoint=@xPoint, fWGYpoint=@yPoint where gID=@sBuildID";sqlList.Add(strUpdatePoint);paraList.Add(new SqlParameter[] { new SqlParameter("@xPoint",xPoint),new SqlParameter("@yPoint",yPoint),new SqlParameter("@sBuildID",sBuildID)});}}#endregion#region 更新小区楼栋坐标(排列楼栋)string strHomeInfoSQL = "select gID,sHomeCode from SQ_Homes where sVillageCode='" + sVillageCode + "' order by sHomeCode";DataTable dtHomeInfo = SqlHelper.ExecuteSqlToTable(strHomeInfoSQL);for (int i = 0; i < dtHomeInfo.Rows.Count; i++){string sHomeCode = dtHomeInfo.Rows[i]["sHomeCode"].ToString();//网格主键string strHomeBuild = "select gID from SQ_Build where sHomeCode = '" + sHomeCode + "' order by sBuildCode";DataTable dtHomeBuild = SqlHelper.ExecuteSqlToTable(strHomeBuild);//网格下的所有楼栋List<string> listUpdatePoint = new List<string>();//更新坐标语句集合for (int k = 1; k <= dtHomeBuild.Rows.Count; k++){string sBuildID = dtHomeBuild.Rows[k - 1]["gID"].ToString();//楼栋主键int xPoint = 76 + 107 * ((k - 1) % 6);//X轴坐标位置int yPoint = 64 + 97 * (k / 6);//Y轴坐标位置string strUpdatePoint = "update SQ_Build set fXpoint=@xPoint, fYpoint=@yPoint where gID=@sBuildID";sqlList.Add(strUpdatePoint);paraList.Add(new SqlParameter[]{new SqlParameter("@xPoint",xPoint),new SqlParameter("@yPoint",yPoint),new SqlParameter("@sBuildID",sBuildID)});}}#endregion#region 生成房屋信息SQL//string sFormat = GetParam("sFormat");//门牌号格式string strInsertFWSQL = "insert into SQ_FWInfo(gID,sBuildCode,sMPH,sFWYT,iDeleteMark,iSort,dCreateDate,sCreateUserRealname,MPHCode,i_CS,i_DY,i_NO) " +"values(NEWID(),@sBuildCode,@sMPH,@lx,0,0,getdate(),'数据导入',@sdoor,@j,@k,@no)";for (int i = 0; i < iBuildRows; i++){string sBuildKey = dtBuild.Rows[i]["楼栋主键"].ToString();//楼栋主键string sBuildCode = dtBuild.Rows[i]["楼栋编码"].ToString();//楼栋编码string sBuildName = dtBuild.Rows[i]["楼栋名称"].ToString();//楼栋名称string sBuildHomeCode = dtBuild.Rows[i]["小区编码"].ToString();//小区编码int iCS = ToInt(dtBuild.Rows[i]["总层数"].ToString());//总层数int iFCS = ToInt(dtBuild.Rows[i]["负层数"].ToString());//负层数int iZCS = iCS - iFCS;//正层数int iDYFWS = ToInt(dtBuild.Rows[i]["每单元每层户数"].ToString());//每单元每层户数int iDYS = ToInt(dtBuild.Rows[i]["单元数"].ToString());//单元数var iDYHS = dtBuild.Rows[i]["单元户数"].ToString().Trim().Replace(",", ",").Split(',');var 不生成的门牌号 = dtBuild.Rows[i]["不生成的门牌号"].ToString().Replace(",", ",");if (!string.IsNullOrEmpty(不生成的门牌号)){不生成的门牌号 = "," + 不生成的门牌号 + ",";}var 商品房 = dtBuild.Rows[i]["商品房"].ToString().Replace(",", ",");if (!string.IsNullOrEmpty(商品房)){商品房 = "," + 商品房 + ",";}var 车库 = dtBuild.Rows[i]["车库"].ToString().Replace(",", ",");if (!string.IsNullOrEmpty(车库)){车库 = "," + 车库 + ",";}for (int j = -iFCS; j <= iZCS; j++)//层数{if (j == 0)continue;bool fc = j < 0;//是否负层for (int k = 1; k <= iDYS; k++)//单元数{int hs = iDYFWS;if (iDYHS.Length >= k){if (iDYHS[k - 1].Trim() != "")hs = Convert.ToInt32(iDYHS[k - 1]);}if (hs > iDYFWS)hs = iDYFWS;for (int m = 1; m <= hs; m++){var no = (k - 1) * iDYFWS + m;var sdoor = j + no.ToString("D2");string sMPH = (fc ? "-" : "") + SQ_Common.GetMPH(sFormat, fc ? -j : j, k, iDYFWS, m);if (不生成的门牌号.Contains("," + sMPH + ","))continue;var lx = "01";if (商品房.Contains("," + sdoor + ","))lx = "02";if (车库.Contains("," + sdoor + ","))lx = "03";sqlList.Add(strInsertFWSQL);paraList.Add(new SqlParameter[]{new SqlParameter("@sBuildCode",sBuildCode),new SqlParameter("@sMPH",sMPH),new SqlParameter("@lx",lx),new SqlParameter("@sdoor",sdoor),new SqlParameter("@j",j),new SqlParameter("@k",k),new SqlParameter("@no",no)});}}}}#endregion#region 记录数据导入日志string strInsertLog = "insert into _SQ_DataImportLog(sID,sVillageCode,sVillageName,iType,sUpLoadUserLoginName,sUpLoadUserRealName,dUpLoadDate,sFormat)" +" values(NEWID(),@sVillageCode,@sVillageName,1,@sUserName,@sRealName,getdate(),@sFormat)";string sUserName = GetSessionCurrentUserInfo.sUserName;//用户登陆名string sRealName = GetSessionCurrentUserInfo.sRealName;//用户姓名sqlList.Add(strInsertLog);paraList.Add(new SqlParameter[] { new SqlParameter("@sVillageCode",sVillageCode),new SqlParameter("@sVillageName",sVillageName),new SqlParameter("@sUserName",sUserName),new SqlParameter("@sRealName",sRealName),new SqlParameter("@sFormat",sFormat)});try{bInitResult = SqlHelper.ExecuteTrans(sqlList, paraList);}catch (Exception){bInitResult = false;mes = "基础数据生成失败!";throw;}#endregionOutputResult(bWGUpdate & bHomeBuildUpdate & bInitResult, mes);}/// <summary>/// 更新导入数据网格编码/// </summary>private bool UpdateWGCode(string sVillageCode){string strWGSQL = "select distinct 序号,地区编码,地区名称,网格编码,网格名称 from _SQ_Excel_BaseInfo where 地区编码='" + sVillageCode + "' order by 序号";DataTable dtWG = SqlHelper.ExecuteSqlToTable(strWGSQL);bool bUpdateWGCode = true;int rows = dtWG.Rows.Count;string sWGCode = "";string sWGName = "";try{int num = 0;//生成网格的序号for (int i = 0; i < rows; i++){if (i > 0){///由于取了序号,网络信息重复,过滤重复的网格更新if (dtWG.Rows[i - 1]["网格名称"].ToString() != dtWG.Rows[i]["网格名称"].ToString()){sWGCode = dtWG.Rows[i]["地区编码"] + GetCode(num + 1);sWGName = dtWG.Rows[i]["网格名称"].ToString();string strUpdateWGCode = "update _SQ_Excel_BaseInfo set 网格编码='" + sWGCode + "' where 网格名称='" + sWGName + "' and 地区编码='" + sVillageCode + "' and (网格编码 ='' or 网格编码 is null)";bUpdateWGCode = SqlHelper.ExecuteSql(strUpdateWGCode);num++;}}else{sWGCode = dtWG.Rows[i]["地区编码"] + GetCode(num + 1);sWGName = dtWG.Rows[i]["网格名称"].ToString();string strUpdateWGCode = "update _SQ_Excel_BaseInfo set 网格编码='" + sWGCode + "' where 网格名称='" + sWGName + "' and 地区编码='" + sVillageCode + "' and (网格编码 ='' or 网格编码 is null)";bUpdateWGCode = SqlHelper.ExecuteSql(strUpdateWGCode);num++;}}}catch (Exception){bUpdateWGCode = false;throw;}return bUpdateWGCode;}/// <summary>/// 更新导入数据小区编码,楼栋编码/// </summary>private bool UpdateHomeBuildCode(string sVillageCode){string strHomeSQL = "select distinct 地区编码,地区名称,小区编码,小区名称 from _SQ_Excel_BaseInfo where 地区编码='" + sVillageCode + "'";// order by 小区编码";DataTable dtHome = SqlHelper.ExecuteSqlToTable(strHomeSQL);bool bUpdateHomeCode = true;bool bUpdateBuildCode = true;int rows = dtHome.Rows.Count;string sHomeCode = "";string sHomeName = "";try{for (int i = 0; i < rows; i++){sHomeCode = dtHome.Rows[i]["地区编码"] + GetCode(i + 1);sHomeName = dtHome.Rows[i]["小区名称"].ToString();string strUpdateWGCode = "update _SQ_Excel_BaseInfo set 小区编码='" + sHomeCode + "' where 小区名称='" + sHomeName + "' and 地区编码='" + sVillageCode + "'";bUpdateHomeCode = SqlHelper.ExecuteSql(strUpdateWGCode);string strBuildSQL = "select distinct 小区编码,小区名称,楼栋编码,楼栋名称 from _SQ_Excel_BaseInfo where 小区编码='" + sHomeCode + "' order by 楼栋编码";DataTable dtBuild = SqlHelper.ExecuteSqlToTable(strBuildSQL);int iBuildRows = dtBuild.Rows.Count;string sBuildCode = "";string sBuildName = "";try{for (int j = 0; j < iBuildRows; j++){sBuildCode = dtBuild.Rows[j]["小区编码"] + GetCode(j + 1);sBuildName = dtBuild.Rows[j]["楼栋名称"].ToString();string strUpdateHomeCode = "update _SQ_Excel_BaseInfo set 楼栋编码='" + sBuildCode + "' where 楼栋名称='" + sBuildName + "' and 小区编码='" + sHomeCode + "'";bUpdateBuildCode = SqlHelper.ExecuteSql(strUpdateHomeCode);}}catch (Exception){bUpdateBuildCode = false;throw;}}}catch (Exception){bUpdateHomeCode = false;throw;}return bUpdateHomeCode && bUpdateBuildCode;}#endregion#region/// <summary>/// 一键生成网格用户信息/// </summary>private void IntelligentWGUser(){bool bInitResult = true;string mes = "网格用户信息生成成功!";string sVillageCode = GetParam("sVillageCode");//社区编码 string sVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称List<string> sqlList = new List<string>();//执行语句List<SqlParameter[]> paraList = new List<SqlParameter[]>();//执行语句相对应的参数#region 生成用户信息string gCreateUserId = GetSessionCurrentUserInfo.gUserID.ToString();//用户主键string sCreateUserRealname = GetSessionCurrentUserInfo.sRealName + "|批量生成";//用户姓名string strInsertUser = "insert into sys_Users(gUserID,iType,gOrganizeID,sUserName,sUserNameLower,sRealName,sPwd,sPwdFormat,bIsLockedOut,iDeleteMark,dCreateDate,gCreateUserId,sCreateUserRealname,bIsManagerLockedout,iAudit) " +" values(@gUserID,2,@gOrganizeID,@sUserName,@sUserNameLower,@sRealName,@sPwd,@sPwdFormat,0,0,getdate(),@gCreateUserId,@sCreateUserRealname,0,2)";string strInsertUserInRole = "insert into sys_UsersInRoles(gRoleID,gUserID,iDeleteMark,iSort,dCreateDate,gCreateUserId,sCreateUserRealname)" +" values(@gRoleID,@gUserID,0,0,getdate(),@gCreateUserId,@sCreateUserRealname)";string strInsertWGUser = "insert into SQ_WGUser(gID,gWGID,gUserID,iDeleteMark,iSort,dCreateDate,gCreateUserId,sCreateUserRealname)" +" values(NEWID(),@gWGID,@gUserID,0,0,getdate(),@gCreateUserId,@sCreateUserRealname)";string strWGSQL = "select distinct 地区编码,地区名称,网格编码,网格名称,w.gID from _SQ_Excel_BaseInfo b join dbo.SQ_WGInfo w  on b.网格编码=w.scode where 地区编码='" + sVillageCode + "' order by 网格编码";DataTable dtWG = SqlHelper.ExecuteSqlToTable(strWGSQL);OrganizeBLL bll = new OrganizeBLL();sys_Organize OrgModel = bll.GetModeByAreaCode(sVillageCode);//当级地区的上级地区的机构实体if (OrgModel != null){string gOrganizeID = OrgModel.gID.ToString();int iWGRows = dtWG.Rows.Count;List<string> userNameList = userBll.GetUserName(sVillageCode, iWGRows);for (int i = 0; i < iWGRows; i++){string gUserID = Guid.NewGuid().ToString();//用户主键string gWGID = dtWG.Rows[i]["gID"].ToString();//网格主键string sWGCode = dtWG.Rows[i]["网格编码"].ToString();//网格编码string sWGName = dtWG.Rows[i]["网格名称"].ToString();//网格名称sqlList.Add(strInsertUser);paraList.Add(new SqlParameter[] { new SqlParameter("@gUserID",gUserID),//用户主键 new SqlParameter("@gOrganizeID",gOrganizeID),//机构主键        new SqlParameter("@sUserName",userNameList[i]),//登录用户名new SqlParameter("@sUserNameLower",userNameList[i].ToLower()),//登录用户名(小写)new SqlParameter("@sRealName",sWGName),//真实姓名new SqlParameter("@sPwd","202cb962ac59075b964b07152d234b70"),//加密后的:123new SqlParameter("@sPwdFormat","0"),new SqlParameter("@gCreateUserId",gCreateUserId),new SqlParameter("@sCreateUserRealname",sCreateUserRealname)});sqlList.Add(strInsertUserInRole);paraList.Add(new SqlParameter[]{new SqlParameter("@gRoleID","4CFD5CB4-D04B-46C0-8738-C8119D2A9FBB"),new SqlParameter("@gUserID",gUserID),new SqlParameter("@gCreateUserId",gCreateUserId),new SqlParameter("@sCreateUserRealname",sCreateUserRealname)});sqlList.Add(strInsertWGUser);paraList.Add(new SqlParameter[]{new SqlParameter("@gWGID",gWGID),new SqlParameter("@gUserID",gUserID),new SqlParameter("@gCreateUserId",gCreateUserId),new SqlParameter("@sCreateUserRealname",sCreateUserRealname),});}}else{OutputResult(bInitResult, mes);return;}#endregion#region 记录数据导入日志string strInsertLog = "insert into _SQ_DataImportLog(sID,sVillageCode,sVillageName,iType,sUpLoadUserLoginName,sUpLoadUserRealName,dUpLoadDate)" +" values(NEWID(),@sVillageCode,@sVillageName,3,@sUserName,@sRealName,getdate())";string sUserName = GetSessionCurrentUserInfo.sUserName;//用户登陆名string sRealName = GetSessionCurrentUserInfo.sRealName;//用户姓名sqlList.Add(strInsertLog);paraList.Add(new SqlParameter[] { new SqlParameter("@sVillageCode",sVillageCode),new SqlParameter("@sVillageName",sVillageName),new SqlParameter("@sUserName",sUserName),new SqlParameter("@sRealName",sRealName),});try{bInitResult = SqlHelper.ExecuteTrans(sqlList, paraList);}catch (Exception){bInitResult = false;mes = "网格用户信息生成失败!";OutputResult(bInitResult, mes);throw;}#endregionOutputResult(bInitResult, mes);}#endregion#region 非功能性辅助方法/// <summary>/// 获取后三位编码/// </summary>/// <param name="i"></param>/// <returns></returns>private string GetCode(int i){if (i < 10)return "00" + i;else if (i < 100)return "0" + i;elsereturn i.ToString();}/// <summary>/// 根据层数,单位数,户数自动生成相应的图片/// </summary>/// <param name="CS">层数</param>/// <param name="DYS">单位数</param>/// <param name="FWS">单元户数</param>/// <returns></returns>public string GetHomeImage(string CS, string DYS){int f = ToInt(CS);int g = ToInt(DYS);//int h = ToInt(FWS);if (f == 1 && g == 1)//&& h == 1)return "别墅_01.png";if (f > 1 && f <= 7)return "多层_06.png";if (f > 7)return "小高层_02.png";return "民房_011.png";}/// <summary>/// 转换字符串类型为整型/// </summary>/// <param name="str"></param>/// <returns></returns>public int ToInt(string str){int _outint = 0;int.TryParse(str, out _outint);return _outint;}/// <summary>/// 检验Excel列数据项与模板数据项是否符合/// </summary>/// <param name="dt"></param>/// <returns></returns>public bool CheckRule(DataTable dt, out string mes, string sVillageName){string[] strArray = { "序号", "社区名称", "网格名称", "小区名称", "楼栋名称", "总层数", "负层数", "单元数", "每单元每层户数", "单元户数", "不生成的门牌号", "商品房", "车库", "备注" };List<string> list = new List<string>();list.AddRange(strArray);//模板字段列集合mes = "";bool bResult = true;List<string> excelList = new List<string>();DataRow dRow = dt.Rows[0];bool IsTitle = true;//Excel是否有标题行,默认有string columnName = dRow[0].ToString();if (columnName != "序号"){IsTitle = false;}for (int i = 0; i < dt.Columns.Count; i++){columnName = IsTitle == true ? dRow[i].ToString() : dt.Columns[i].ColumnName;if (!columnName.StartsWith("F")){excelList.Add(columnName);//Excel字段列集合}}if (excelList.Count != 14){bResult = false;mes = "数据校验失败!<br/>《社区网格信息采集模版》中数据列必须为14列!<br/>";var listMore = excelList.Except(list);//多出的数据列foreach (var item in listMore){mes += "《社区网格信息采集模版》中多出“" + item + "”数据列!请删除!<br/>";}var listLess = list.Except(excelList);//少的数据列foreach (var item in listLess){mes += "《社区网格信息采集模版》中缺少“" + item + "”数据列!<br/>";}}else{for (int i = 0; i < strArray.Length; i++){if (excelList[i] != strArray[i]){bResult = false;break;}}if (!bResult){mes += "《社区网格信息采集模版》中数据列名称和顺序必须与下列信息一致:</br>";mes += "【" + strArray[0] + "】|【" + strArray[1] + "】|【" + strArray[2] + "】|【" + strArray[3] + "】|【" + strArray[4] + "】|【" + strArray[5] + "】|【" + strArray[6] + "】|【" + strArray[7] + "】|【" + strArray[8] + "】|【" + strArray[9] + "】|【" + strArray[10] + "】|【" + strArray[11] + "】|【" + strArray[12] + "】|【" + strArray[13] + "】</br>";}}return bResult;}/// <summary>/// 去除Excel中的空白行/// </summary>/// <param name="dt"></param>protected void removeEmpty(DataTable dt){List<DataRow> removelist = new List<DataRow>();for (int i = 0; i < dt.Rows.Count; i++){bool rowdataisnull = true;for (int j = 0; j < dt.Columns.Count; j++){if (!string.IsNullOrEmpty(dt.Rows[i][j].ToString().Trim())){rowdataisnull = false;}}if (rowdataisnull){removelist.Add(dt.Rows[i]);}}for (int i = 0; i < removelist.Count; i++){dt.Rows.Remove(removelist[i]);}}#endregion}
}

PeopleInfoListHandler

using HMFW.SQLServerDAL;
using HMFW.Web.App_Code;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;namespace HMFW.Web.Pages.DataImport
{/// <summary>/// PeopleInfoListHandler 的摘要说明/// </summary>public class PeopleInfoListHandler : BaseHandler{protected override void ActionHandler(string action){switch (action.ToLower()){case "fileupload"://上传社区导入数据UploadFile();break;case "inexport":ReadExcel();//导入Excel数据表临时存储表break;case "datavalidate"://数据校验DataValidate();break;case "intelligentimport"://一键导入家庭人口信息IntelligentImPort();break;default:break;}}#region 文件上传/// <summary>/// 文件上传/// </summary>private void UploadFile(){string pathPrefix = "/upload/DataImport/PersonInfo/";try{HttpPostedFile file = _context.Request.Files["Filedata"];if (file == null || file.ContentLength == 0)throw new ArgumentOutOfRangeException("没有文件需要上传或文件过小!");if (file.ContentLength > 10000000)throw new ArgumentOutOfRangeException(string.Format("所上传的文件大小{0}字节超过指定大小{1}字节!", file.ContentLength, 10000000));string[] strings = file.FileName.Split('.');string path = Path.Combine(pathPrefix,DateTime.Now.ToString("yyyyMMddHHmmss") + DateTime.Now.Millisecond + "." +strings[strings.Length - 1]);string sbst;try{sbst = HttpContext.Current.Server.MapPath(path);}catch{sbst = path;}FileInfo fileInfo = new FileInfo(sbst);if (!fileInfo.Directory.Exists)fileInfo.Directory.Create();file.SaveAs(sbst);_context.Response.StatusCode = 200;_context.Response.Write(path);}catch{// If any kind of error occurs return a 500 Internal Server error_context.Response.StatusCode = 500;_context.Response.Write("An error occured");_context.Response.End();}finally{_context.Response.End();}}#endregion#region Excel数据导入数据库/// <summary>/// Excel数据导入数据库/// </summary>private void ReadExcel(){string sVillageCode = GetParam("sVillageCode");string sVillageName = GetParam("sVillageName");string sFileName = GetParam("filePath");//Excel路径string sRandomID = GetParam("sRandomID");//页面导入数据标识,Guidstring connStr = "";string fileType = System.IO.Path.GetExtension(sFileName);if (string.IsNullOrEmpty(fileType)){Output("请选择需要导入的文件!");}sFileName = _context.Server.MapPath(sFileName);if (fileType == ".xls")connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + sFileName + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";elseconnStr = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + sFileName + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";string sql_F = "Select * FROM [{0}]";DataTable dtResult = new DataTable();OleDbConnection conn = null;OleDbDataAdapter da = null;DataTable dtSheetName = null;bool resul = true;string Mes = "上传成功!";try{// 初始化连接,并打开conn = new OleDbConnection(connStr);conn.Open();// 获取数据源的表定义元数据                        string SheetName = "";dtSheetName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });// 初始化适配器da = new OleDbDataAdapter();//SheetName = (string)dtSheetName.Rows[0]["TABLE_NAME"];for (int i = 0; i < dtSheetName.Rows.Count; i++){SheetName += dtSheetName.Rows[i]["TABLE_NAME"].ToString();}if (SheetName.Contains("社区人口信息$")){da.SelectCommand = new OleDbCommand(String.Format(sql_F, "社区人口信息$"), conn);da.Fill(dtResult);for (int i = 0; i < 13; i++){dtResult.Rows.RemoveAt(dtResult.Rows.Count - 1);}string errMes = "";if (!CheckRule(dtResult, out errMes, sVillageName)){resul = false;Mes = errMes;   //"Excel列数据项与模板数据项不符合,请检验!";}else{string strDelSQL = "delete from _SQ_Excel_PeopleInfo where sRandomID='" + sRandomID + "'";SqlHelper.ExecuteSql(strDelSQL);string strSQL = "";string sHouseholdIDCard = "";//户主身份证号string sFamilyID = "";//家庭表主键string sFamilyNo = "";//家庭编码string sMPH = "";//门牌号string sJTGX = "";//家庭关系 foreach (DataRow r in dtResult.Rows){if (string.IsNullOrEmpty(r[0].ToString().Trim()) || r[0].ToString() != "序号"){sJTGX = r[8].ToString().Trim();if (sJTGX == "本人"){sHouseholdIDCard = r[9].ToString();//户主身份证号sFamilyID = Guid.NewGuid().ToString().ToUpper();//家庭表主键sFamilyNo = Guid.NewGuid().ToString().ToUpper();//家庭编码sMPH = r[5].ToString();//户主门牌号}else if (sJTGX == "孙子" || sJTGX == "孙女" || sJTGX == "外孙子" || sJTGX == "外孙女"){sJTGX = "孙子、孙女或外孙子、外孙女";}else if (sJTGX == "祖父母" || sJTGX == "外祖父母"){sJTGX = "孙子、孙女或外孙子、外孙女";}if (r[5].ToString() == ""){r[5] = sMPH;}strSQL = "insert into _SQ_Excel_PeopleInfo(人员主键,地区名称,地区编码,序号,社区名称,网格名称,小区名称,楼栋名称,门牌号,姓名,性别,与户主关系,身份证号,家庭类别,人员性质,民族,户口性质,联系电话,户籍地址,户主身份证号,家庭主键,家庭编码,sRandomID)values(NEWID(),'" +sVillageName + "','" + sVillageCode + "','" + r[0] + "','" + r[1] + "','" + r[2] + "','" + r[3] + "','" + r[4] + "','" + r[5] + "','" + r[6] + "','" + r[7] + "','" + sJTGX + "','" + r[9] + "','" + r[10] + "','" + r[11] + "','" + r[12] + "','" + r[13] + "','" + r[14] + "','" + r[15] + "','" + sHouseholdIDCard + "','" + sFamilyID + "','" + sFamilyNo + "','" + sRandomID + "')";SqlHelper.ExecuteSql(strSQL);}}string strUpdateAreaSQL = "update _SQ_Excel_PeopleInfo set 省编码=sShengCode,市编码=sShiCode, 县编码=sAreaCode, 乡镇编码=sTownCode from sysArea a where 地区编码=a.sID and 地区编码='" + sVillageCode + "' and sRandomID='" + sRandomID + "'";string strUpdateCodeSQL = "update _SQ_Excel_PeopleInfo set 网格编码=a.sWGCode,小区编码=a.sHomeCode,楼栋编码=a.sBuildCode from VIEW_SQ_WGHomeBuild a where _SQ_Excel_PeopleInfo.楼栋名称= a.sBuildName and _SQ_Excel_PeopleInfo.小区名称=a.sHomeName and _SQ_Excel_PeopleInfo.网格名称=a.sWGName and _SQ_Excel_PeopleInfo.社区名称=a.sName and a.sID='" + sVillageCode + "' and _SQ_Excel_PeopleInfo.地区编码='" + sVillageCode + "' and _SQ_Excel_PeopleInfo.sRandomID='" + sRandomID + "'";resul = SqlHelper.ExecuteSql(strUpdateAreaSQL + strUpdateCodeSQL);}}else{resul = false;Mes = "导入失败!Excel中不包含名称为“实有人口信息”的工作薄!";}}catch (Exception ex){resul = false;Mes = "导入失败!";}finally{// 关闭连接if (conn.State == ConnectionState.Open){conn.Close();da.Dispose();conn.Dispose();}}OutputResult(resul, Mes);}/// <summary>/// 检验Excel列数据项与模板数据项是否符合/// </summary>/// <param name="dt"></param>/// <returns></returns>public bool CheckRule(DataTable dt, out string mes, string sVillageName){mes = "";bool bResult = true;if (dt.Columns.Count != 16){mes = "Excel模板必须为16列";bResult = false;return bResult;}int dtRows = dt.Rows.Count;DataRow dr = dt.Rows[0];string c1 = dr[0].ToString();string c2 = dr[1].ToString();string c3 = dr[2].ToString();string c4 = dr[3].ToString();string c5 = dr[4].ToString();string c6 = dr[5].ToString();string c7 = dr[6].ToString();string c8 = dr[7].ToString();string c9 = dr[8].ToString();string c10 = dr[9].ToString();string c11 = dr[10].ToString();string c12 = dr[11].ToString();string c13 = dr[12].ToString();string c14 = dr[13].ToString();string c15 = dr[14].ToString();string c16 = dr[15].ToString();if (!(c1 == "序号" && c2 == "社区名称" && c3 == "网格名称" && c4 == "小区名称" && c5 == "楼栋名称" && c6 == "门牌号" && c7 == "姓名" && c8 == "性别" && c9 == "与户主关系" && c10 == "身份证号" && c11 == "家庭类别" && c12 == "人员性质" && c13 == "民族" && c14 == "户口性质" && c15 == "联系电话" && c16 == "户籍地址")){mes += "Excel模板第一行的标题行必须为如下顺序的标题:</br>";mes += "【序号】|【社区名称】|【网格名称】|【小区名称】|【楼栋名称】|【门牌号】|【姓名】|【性别】|【与户主关系】|【身份证号】|【家庭类别】|【人员性质】|【民族】|【户口性质】|【联系电话】|【户籍地址】</br>";bResult = false;}else{//List<string> villageNameList = new List<string>();//社区名称//villageNameList.Add(sVillageName);//for (int i = 0; i < dtRows; i++)//{//    string rowVillageName = dt.Rows[i]["社区名称"].ToString().Trim();//    villageNameList.Add(rowVillageName);//}//villageNameList = villageNameList.Distinct().ToList();//去除重复地区//if (villageNameList.Count == 1 && villageNameList[0] != sVillageName)//{//    mes += "Excel里的地区与地区控件所选地区不一致。请检验!控件地区为:" + sVillageName + "------Excel里的地区为:" + villageNameList[0];//    bResult = false;//}//else if (villageNameList.Count > 1)//{//    string sVillages = "";//Excel里面包含的所有社区名称//    foreach (string item in villageNameList)//    {//        sVillages += item + ",";//    }//    sVillages.EndsWith(",");//    mes += "Excel里的数据不属于同一个地区。请检验!控件地区为:" + sVillageName + "------Excel里的地区为:" + sVillages;//    bResult = false;//}}return bResult;}#endregion#region 数据校验/// <summary>/// 数据校验/// </summary>private void DataValidate(){bool bCheckResult = true;string mes = "";string sVillageCode = GetParam("sVillageCode");//地区控件选择的导入数据的地区---编码string sVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称string sRandomID = GetParam("sRandomID");//页面导入数据标识,Guidstring rowNum;//序号 string strRequireValue = "select * from dbo._SQ_Excel_PeopleInfo where sRandomID = '" + sRandomID + "' and ( 序号='' OR 社区名称='' OR 网格名称='' OR 小区名称='' OR 楼栋名称='' OR 姓名='' OR 性别='' OR 与户主关系='' OR 身份证号='' OR 家庭类别='' OR 人员性质='' OR 民族='' OR 户口性质='' )";DataTable dtRequireValue = SqlHelper.ExecuteSqlToTable(strRequireValue);for (int i = 0; i < dtRequireValue.Rows.Count; i++){rowNum = dtRequireValue.Rows[i]["序号"].ToString().Trim();if (rowNum == "")//行号{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:序号不能为空!</br>";}if (dtRequireValue.Rows[i]["社区名称"].ToString().Trim() == "")//社区名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:社区名称不能为空!</br>";}if (dtRequireValue.Rows[i]["网格名称"].ToString().Trim() == "")//网格名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:网格名称不能为空!</br>";}if (dtRequireValue.Rows[i]["小区名称"].ToString().Trim() == "")//小区名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:小区名称不能为空!</br>";}if (dtRequireValue.Rows[i]["楼栋名称"].ToString().Trim() == "")//楼栋名称{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:楼栋名称不能为空!</br>";}if (dtRequireValue.Rows[i]["姓名"].ToString().Trim() == "")//姓名{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:姓名不能为空!</br>";}if (dtRequireValue.Rows[i]["性别"].ToString().Trim() == "")//性别{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:性别不能为空!</br>";}if (dtRequireValue.Rows[i]["与户主关系"].ToString().Trim() == "")//与户主关系{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:与户主关系不能为空!</br>";}if (dtRequireValue.Rows[i]["身份证号"].ToString().Trim() == "")//身份证号{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:身份证号不能为空!</br>";}if (dtRequireValue.Rows[i]["家庭类别"].ToString().Trim() == "")//家庭类别{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:家庭类别不能为空!</br>";}if (dtRequireValue.Rows[i]["人员性质"].ToString().Trim() == "")//人员性质{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:人员性质不能为空!</br>";}if (dtRequireValue.Rows[i]["民族"].ToString().Trim() == "")//民族{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:民族不能为空!</br>";}if (dtRequireValue.Rows[i]["户口性质"].ToString().Trim() == "")//户口性质{bCheckResult = false;mes += "序号【" + rowNum + "】,错误说明:户口性质不能为空!</br>";}}string strMPHValue = "select * from dbo._SQ_Excel_PeopleInfo where sRandomID = '" + sRandomID + "' and 门牌号 = '' and 与户主关系 ='本人' " + " and sRandomID='" + sRandomID + "' order by 序号";DataTable dtMPHValue = SqlHelper.ExecuteSqlToTable(strMPHValue);for (int i = 0; i < dtMPHValue.Rows.Count; i++){bCheckResult = false;rowNum = dtMPHValue.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:与户主关系为【本人】的门牌号不能为空!</br>";}string strVillageName = "select 序号,社区名称 from dbo._SQ_Excel_PeopleInfo where 社区名称 !='" + sVillageName + "' and 社区名称 !='' " + " and sRandomID='" + sRandomID + "' order by 序号"; ;DataTable dtVillageName = SqlHelper.ExecuteSqlToTable(strVillageName);for (int i = 0; i < dtVillageName.Rows.Count; i++){bCheckResult = false;rowNum = dtVillageName.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:Excel里的数据不属于同一个地区!控件地区为【" + sVillageName + "】---Excel里的地区为【" + dtVillageName.Rows[i]["社区名称"].ToString().Trim() + "】</br>";}string strWGCheck = "select 序号,网格名称 from dbo._SQ_Excel_PeopleInfo where (网格名称 not in (select distinct 网格名称 from SQ_WGInfo where sVillageCode='" + sVillageCode + "')) AND sRandomID='" + sRandomID + "' order by 序号";DataTable dtWG = SqlHelper.ExecuteSqlToTable(strWGCheck);for (int i = 0; i < dtWG.Rows.Count; i++){bCheckResult = false;rowNum = dtWG.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:人口表里有网格不在基础表之内。网格名称:【" + dtWG.Rows[i]["网格名称"].ToString() + "】<br/>";}string strHomeBuildCheck = "select 序号,网格名称,小区名称,楼栋名称,网格名称+小区名称+楼栋名称 from dbo._SQ_Excel_PeopleInfo where (网格名称+小区名称+楼栋名称 not in (select sWGName+sHomeName+sBuildName from dbo.VIEW_SQ_WGHomeBuild where sID='" + sVillageCode + "')) AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtHomeBuild = SqlHelper.ExecuteSqlToTable(strHomeBuildCheck);if (dtHomeBuild.Rows.Count > 0){for (int i = 0; i < dtHomeBuild.Rows.Count; i++){bCheckResult = false;rowNum = dtHomeBuild.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:网格,小区,楼栋与基本表不对应。网格名称:【" + dtHomeBuild.Rows[i]["网格名称"].ToString() + "】---小区名称:【" + dtHomeBuild.Rows[i]["小区名称"].ToString() + "】---楼栋名称:【" + dtHomeBuild.Rows[i]["楼栋名称"].ToString() + "】<br/>";}}string strIDCardCheck = "select 身份证号 from dbo._SQ_Excel_PeopleInfo  WHERE  地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' group by 身份证号 having COUNT(1)>1";DataTable dtIDCard = SqlHelper.ExecuteSqlToTable(strIDCardCheck);if (dtIDCard.Rows.Count > 0){bCheckResult = false;for (int i = 0; i < dtIDCard.Rows.Count; i++){string strRepeatIDCard = "SELECT * FROM _SQ_Excel_PeopleInfo WHERE  [地区编码] = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' AND 身份证号='" + dtIDCard.Rows[i]["身份证号"] + "' order by 序号";DataTable dtRepeatIDCard = SqlHelper.ExecuteSqlToTable(strRepeatIDCard);for (int j = 0; j < dtRepeatIDCard.Rows.Count; j++){rowNum = dtRepeatIDCard.Rows[j]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:身份证有重复!重复号码为:【" + dtRepeatIDCard.Rows[i]["身份证号"].ToString() + "】<br/>";}}}string strIDCardLenCheck = "select 序号,身份证号,LEN(身份证号) as idLen from dbo._SQ_Excel_PeopleInfo where LEN(身份证号)!=18 and LEN(身份证号)!=15 AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtIDCardLen = SqlHelper.ExecuteSqlToTable(strIDCardLenCheck);if (dtIDCardLen.Rows.Count > 0){for (int i = 0; i < dtIDCardLen.Rows.Count; i++){bCheckResult = false;rowNum = dtIDCardLen.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:身份证位数不对!号码:【" + dtIDCardLen.Rows[i]["身份证号"].ToString() + "】---位数:【" + dtIDCardLen.Rows[i]["idLen"].ToString() + "】<br/>";}}string strMZDictCheck = "select 序号,民族 from dbo._SQ_Excel_PeopleInfo where 民族 not in(select sValue from dbo.BaseInfo_dict where sTableCode='MZ') and 民族!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtMZDict = SqlHelper.ExecuteSqlToTable(strMZDictCheck);if (dtMZDict.Rows.Count > 0){for (int i = 0; i < dtMZDict.Rows.Count; i++){bCheckResult = false;rowNum = dtMZDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:民族字段的值不在填表说明内!值为:【" + dtMZDict.Rows[i]["民族"].ToString() + "】<br/>";}}string strXBDictCheck = "select 序号,性别 from dbo._SQ_Excel_PeopleInfo where 性别 not in(select sValue from dbo.BaseInfo_dict where sTableCode='XB') and 性别!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtXBDict = SqlHelper.ExecuteSqlToTable(strXBDictCheck);if (dtXBDict.Rows.Count > 0){for (int i = 0; i < dtXBDict.Rows.Count; i++){bCheckResult = false;rowNum = dtXBDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:性别字段的值不在填表说明内!值为:【" + dtXBDict.Rows[i]["性别"].ToString() + "】<br/>";}}string strJTGXDictCheck = "select 序号,与户主关系 from dbo._SQ_Excel_PeopleInfo where 与户主关系 not in(select sValue from dbo.BaseInfo_dict where sTableCode='JTGX') and 与户主关系!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtJTGXDict = SqlHelper.ExecuteSqlToTable(strJTGXDictCheck);if (dtJTGXDict.Rows.Count > 0){for (int i = 0; i < dtJTGXDict.Rows.Count; i++){bCheckResult = false;rowNum = dtJTGXDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:与户主关系的值不在填表说明内!值为:【" + dtJTGXDict.Rows[i]["与户主关系"].ToString() + "】<br/>";}}string strHJXZDictCheck = "select 序号,户口性质 from dbo._SQ_Excel_PeopleInfo where 户口性质 not in(select sValue from dbo.BaseInfo_dict where sTableCode='HJXZ') and 户口性质!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtHJXZDict = SqlHelper.ExecuteSqlToTable(strHJXZDictCheck);if (dtHJXZDict.Rows.Count > 0){for (int i = 0; i < dtHJXZDict.Rows.Count; i++){bCheckResult = false;rowNum = dtHJXZDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:户口性质的值不在填表说明内!值为:【" + dtHJXZDict.Rows[i]["户口性质"].ToString() + "】<br/>";}}string strRYXZDictCheck = "select 序号,人员性质 from dbo._SQ_Excel_PeopleInfo where 人员性质 not in(select sValue from dbo.BaseInfo_dict where sTableCode='RYXZ') and 人员性质!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtRYXZDict = SqlHelper.ExecuteSqlToTable(strRYXZDictCheck);if (dtRYXZDict.Rows.Count > 0){for (int i = 0; i < dtRYXZDict.Rows.Count; i++){bCheckResult = false;rowNum = dtRYXZDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:人员性质的值不在填表说明内!值为:【" + dtRYXZDict.Rows[i]["人员性质"].ToString() + "】<br/>";}}string strJTLBDictCheck = "select 序号,家庭类别 from dbo._SQ_Excel_PeopleInfo where 家庭类别 not in(select sValue from dbo.BaseInfo_dict where sTableCode='JTLB') and 家庭类别!='' AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "' order by 序号";DataTable dtJTLBDict = SqlHelper.ExecuteSqlToTable(strJTLBDictCheck);if (dtJTLBDict.Rows.Count > 0){for (int i = 0; i < dtJTLBDict.Rows.Count; i++){bCheckResult = false;rowNum = dtJTLBDict.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:家庭类别的值不在填表说明内!值为:【" + dtJTLBDict.Rows[i]["家庭类别"].ToString() + "】<br/>";}}string strMPHNotInFWInfo = "select 序号,门牌号,楼栋名称,小区名称 from dbo._SQ_Excel_PeopleInfo e"+ " where 门牌号 not in (select sMPH from SQ_FWInfo f where e.楼栋编码=f.sBuildCode) AND 地区编码 = '" + sVillageCode + "' and sRandomID='" + sRandomID + "'  order by 序号";DataTable dtMPHNotInFWInfo = SqlHelper.ExecuteSqlToTable(strMPHNotInFWInfo);if (dtMPHNotInFWInfo.Rows.Count > 0){for (int i = 0; i < dtMPHNotInFWInfo.Rows.Count; i++){bCheckResult = false;rowNum = dtMPHNotInFWInfo.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:Excel表格里的门牌号不在生成的房屋内!小区名称:【" + dtMPHNotInFWInfo.Rows[i]["小区名称"] + "】---楼栋名称:【" + dtMPHNotInFWInfo.Rows[i]["楼栋名称"] + "】---门牌号:【" + dtMPHNotInFWInfo.Rows[i]["门牌号"] + "】<br/>";}}//根据身份证号,判断人员数据是否已存在。若存在,不允许重复导入string strExistData = "select e.* from dbo._SQ_Excel_PeopleInfo e join SQ_PeopleInfo p on e.身份证号=p.sIDCard where e.sRandomID='" + sRandomID + "' order by e.序号";DataTable dtExistDataInfo = SqlHelper.ExecuteSqlToTable(strExistData);if (dtExistDataInfo.Rows.Count > 0){for (int i = 0; i < dtExistDataInfo.Rows.Count; i++){bCheckResult = false;rowNum = dtExistDataInfo.Rows[i]["序号"].ToString().Trim();mes += "序号【" + rowNum + "】,错误说明:人员信息已存在,不允许重复导入!姓名:【" + dtExistDataInfo.Rows[i]["姓名"] + "】---身份证号:【" + dtExistDataInfo.Rows[i]["身份证号"] + "】<br/>";}}if (mes == ""){mes = "数据校验成功!";}OutputResult(bCheckResult, mes);}#endregion#region 一键导入家庭人口信息/// <summary>/// 一键导入家庭人口信息/// </summary>private void IntelligentImPort(){bool bInitResult = true;string mes = "家庭人口信息生成成功!";string sImportVillageCode = GetParam("sVillageCode");//社区编码 string sImportVillageName = GetParam("sVillageName");//地区控件选择的导入数据的地区---名称string sRandomID = GetParam("sRandomID");//页面导入数据标识,GuidList<string> sqlList = new List<string>();//执行语句List<SqlParameter[]> paraList = new List<SqlParameter[]>();//执行语句相对应的参数#region 导入家庭人口信息string strPeopleSQL = "select * from _SQ_Excel_PeopleInfo where sRandomID='" + sRandomID + "' order by 网格编码";DataTable dtPeople = SqlHelper.ExecuteSqlToTable(strPeopleSQL);string strInsertFamilySQL = "insert into SQ_FamilyInfo(gID,sFamilyNo,sVillageCode,sFamilyFkDZ,sLBCode,iFlag,iDeleteMark,iSort,dCreateDate,sCreateUserRealname,MPHCode,iFL,sAreaCode,sTownCode,sHomeCode,sBuildCode,sWGCode,sShiCode,sShengCode) " +"values(@sFamilyKey,@sFamilyNo,@sVillageCode,@sHKDZ,@sLBCode,1,0,0,getdate(),'数据导入',@sMPH,0,@sAreaCode,@sTownCode,@sHomeCode,@sBuildCode,@sWGCode,@sShiCode,@sShengCode)";string strInsertPeopleSQL = "insert into SQ_PeopleInfo(gID,gFamliyID,sFamilyNo,sFamilyGX,sPeopName,sPeopNo,iBdhj,sIDCard,sSex,sNation,sLXDH,sHKXZ,sHJDZ,iSW,iRYXZ,iDeleteMark,iSort,dCreateDate,sCreateUserRealname,sAreaCode,sVillageCode,sTownCode,sHomeCode,sBuildCode,sWGCode,MPHCode,iZXState,sShiCode,sShengCode,dDate) " +"values(NEWID(),@gPFamliyID,@sPFamilyNo,@sFamilyGX,@sPeopName,@sPeopNo,1,@sIDCard,@sSex,@sNation,@sLXDH,@sHKXZ,@sHJDZ,0,@iRYXZ,0,0,getdate(),'数据导入',@sAreaCode,@sPVillageCode,@sTownCode,@sHomeCode,@sBuildCode,@sWGCode,@MPHCode,0,@sShiCode,@sShengCode,@dPeopleDate)";int iPeopleRows = dtPeople.Rows.Count;for (int i = 0; i < iPeopleRows; i++){string gPFamliyID = dtPeople.Rows[i]["家庭主键"].ToString();//家庭表主键string sPFamilyNo = dtPeople.Rows[i]["家庭编码"].ToString();//家庭表编码string sFamilyGX = GetDictCode("JTGX", dtPeople.Rows[i]["与户主关系"].ToString());//与户主关系string sPeopName = dtPeople.Rows[i]["姓名"].ToString();//姓名string sPeopNo = Guid.NewGuid().ToString().ToUpper();//人员编号string sIDCard = dtPeople.Rows[i]["身份证号"].ToString();//身份证号string sSex = GetDictCode("XB", dtPeople.Rows[i]["性别"].ToString());//性别string sNation = GetDictCode("MZ", dtPeople.Rows[i]["民族"].ToString());//民族string sLXDH = dtPeople.Rows[i]["联系电话"].ToString(); //联系电话string sHKXZ = GetDictCode("HJXZ", dtPeople.Rows[i]["户口性质"].ToString());//户口性质string sHJDZ = dtPeople.Rows[i]["户籍地址"].ToString(); //户籍地址string iRYXZ = GetDictCode("RYXZ", dtPeople.Rows[i]["人员性质"].ToString());//人员性质string sAreaCode = dtPeople.Rows[i]["县编码"].ToString();//县区编码string sPVillageCode = dtPeople.Rows[i]["地区编码"].ToString();//居委村编码string sTownCode = dtPeople.Rows[i]["乡镇编码"].ToString();//乡镇编码string sHomeCode = dtPeople.Rows[i]["小区编码"].ToString();//小区编码string sBuildCode = dtPeople.Rows[i]["楼栋编码"].ToString();//楼栋编码string sWGCode = dtPeople.Rows[i]["网格编码"].ToString();//网格编码string MPHCode = dtPeople.Rows[i]["门牌号"].ToString();//门牌号string sShiCode = dtPeople.Rows[i]["市编码"].ToString();//市编码string sShengCode = dtPeople.Rows[i]["省编码"].ToString();//省编码DateTime? dPeopleDate = null;//出生日期DateTime dTemp = GetDateFromIDCard(sIDCard);//if (dTemp.ToString() != "1900-01-01"){dPeopleDate = dTemp;}sqlList.Add(strInsertPeopleSQL);paraList.Add(new SqlParameter[]{new SqlParameter("@gPFamliyID",gPFamliyID),new SqlParameter("@sPFamilyNo",sPFamilyNo),new SqlParameter("@sFamilyGX",sFamilyGX),new SqlParameter("@sPeopName",sPeopName),new SqlParameter("@sPeopNo",sPeopNo),new SqlParameter("@sIDCard",sIDCard),new SqlParameter("@sSex",sSex),new SqlParameter("@sNation",sNation),new SqlParameter("@sLXDH",sLXDH),new SqlParameter("@sHKXZ",sHKXZ),new SqlParameter("@sHJDZ",sHJDZ),new SqlParameter("@iRYXZ",iRYXZ),new SqlParameter("@sAreaCode",sAreaCode),new SqlParameter("@sPVillageCode",sPVillageCode),new SqlParameter("@sTownCode",sTownCode),new SqlParameter("@sHomeCode",sHomeCode),new SqlParameter("@sBuildCode",sBuildCode),new SqlParameter("@sWGCode",sWGCode),new SqlParameter("@MPHCode",MPHCode),new SqlParameter("@sShiCode",sShiCode),new SqlParameter("@sShengCode",sShengCode),new SqlParameter("@dPeopleDate",dPeopleDate)});}for (int i = 0; i < iPeopleRows; i++){if (dtPeople.Rows[i]["与户主关系"].ToString() == "本人"){string sFamilyKey = dtPeople.Rows[i]["家庭主键"].ToString();//家庭表主键string sFamilyNo = dtPeople.Rows[i]["家庭编码"].ToString();//家庭编号 string sVillageCode = dtPeople.Rows[i]["地区编码"].ToString();//地区编码 string sHKDZ = dtPeople.Rows[i]["户籍地址"].ToString();//户口地址string sLBCode = GetDictCode("JTLB", dtPeople.Rows[i]["家庭类别"].ToString());//家庭类别string sMPH = dtPeople.Rows[i]["门牌号"].ToString();   //门牌号string sAreaCode = dtPeople.Rows[i]["县编码"].ToString();//县区编码string sTownCode = dtPeople.Rows[i]["乡镇编码"].ToString();//乡镇编码string sHomeCode = dtPeople.Rows[i]["小区编码"].ToString();//小区编码string sBuildCode = dtPeople.Rows[i]["楼栋编码"].ToString();//楼栋编码string sWGCode = dtPeople.Rows[i]["网格编码"].ToString();//网格编码string sShiCode = dtPeople.Rows[i]["市编码"].ToString();//市编码string sShengCode = dtPeople.Rows[i]["省编码"].ToString();//省编码sqlList.Add(strInsertFamilySQL);paraList.Add(new SqlParameter[]{new SqlParameter("@sFamilyKey",sFamilyKey),new SqlParameter("@sFamilyNo",sFamilyNo),new SqlParameter("@sVillageCode",sVillageCode),new SqlParameter("@sHKDZ",sHKDZ),new SqlParameter("@sLBCode",sLBCode),new SqlParameter("@sMPH",sMPH),new SqlParameter("@sAreaCode",sAreaCode),new SqlParameter("@sTownCode",sTownCode),new SqlParameter("@sHomeCode",sHomeCode),new SqlParameter("@sBuildCode",sBuildCode),new SqlParameter("@sWGCode",sWGCode),new SqlParameter("@sShiCode",sShiCode),new SqlParameter("@sShengCode",sShengCode),});string strSelectPeople = "select gID,sPeopName,sIDCard,sFamilyGX from sq_PeopleInfo where gFamliyID='" + sFamilyKey + "' and iDeleteMark=0  ORDER BY sFamilyGX ";DataTable dtPeoInFamily = SqlHelper.ExecuteSqlToTable(strSelectPeople);string strPeopleNames = "";string strIDCards = "";for (int m = 0; m < dtPeoInFamily.Rows.Count; m++){if (dtPeoInFamily.Rows[m]["sFamilyGX"].ToString() == "01")//如果是户主{strPeopleNames = dtPeoInFamily.Rows[m]["sPeopName"].ToString() + "," + strPeopleNames;strIDCards = "," + dtPeoInFamily.Rows[m]["sIDCard"].ToString() + "," + strIDCards;}else{strPeopleNames += dtPeoInFamily.Rows[m]["sPeopName"].ToString() + ",";strIDCards += "," + dtPeoInFamily.Rows[m]["sIDCard"].ToString() + ",";}}int PeoInFamilyCount = dtPeoInFamily.Rows.Count;//家庭人口数string strUpdateFamily = "update SQ_FamilyInfo set Peoples=@strPeopleNames, IDCards=@strIDCards, iJTRKS=@PeoInFamilyCount where gID=@sFamilyKey";sqlList.Add(strUpdateFamily);paraList.Add(new SqlParameter[]{new SqlParameter("@strPeopleNames",strPeopleNames),new SqlParameter("@strIDCards",strIDCards),new SqlParameter("@PeoInFamilyCount",PeoInFamilyCount),new SqlParameter("@sFamilyKey",sFamilyKey)});}}string strUpdateFamilyMPH = "update SQ_FamilyInfo set MPHCode=f.MPHCode from SQ_FWInfo f,_SQ_Excel_PeopleInfo p where SQ_FamilyInfo.MPHCode=f.sMPH and SQ_FamilyInfo.sBuildCode=f.sBuildCode and SQ_FamilyInfo.sVillageCode=p.地区编码  and p.sRandomID=@sRandomID ";//更新字典项名称----性别名称,民族名称,与户主关系名称strUpdateFamilyMPH += "update SQ_PeopleInfo set sSexName=d.sValue from dbo.BaseInfo_dict d, _SQ_Excel_PeopleInfo p where SQ_PeopleInfo.sSex=d.sCode and d.sTableCode='XB' and SQ_PeopleInfo.sVillageCode=p.地区编码 and p.sRandomID=@sRandomID ";strUpdateFamilyMPH += "update SQ_PeopleInfo set sNationName=d.sValue from dbo.BaseInfo_dict d, _SQ_Excel_PeopleInfo p where SQ_PeopleInfo.sNation=d.sCode and d.sTableCode='MZ' and SQ_PeopleInfo.sVillageCode=p.地区编码 and p.sRandomID=@sRandomID ";strUpdateFamilyMPH += "update SQ_PeopleInfo set sFamilyGXName=d.sValue from dbo.BaseInfo_dict d, _SQ_Excel_PeopleInfo p where SQ_PeopleInfo.sFamilyGX=d.sCode and d.sTableCode='JTGX' and SQ_PeopleInfo.sVillageCode=p.地区编码 and p.sRandomID=@sRandomID ";sqlList.Add(strUpdateFamilyMPH);paraList.Add(new SqlParameter[] { new SqlParameter("@sRandomID",sRandomID)});#region 记录数据导入日志string strInsertLog = "insert into _SQ_DataImportLog(sID,sVillageCode,sVillageName,iType,sUpLoadUserLoginName,sUpLoadUserRealName,dUpLoadDate)" +" values(NEWID(),@sImportVillageCode,@sImportVillageName,2,@sUserName,@sRealName,getdate())";string sUserName = GetSessionCurrentUserInfo.sUserName;//用户登陆名string sRealName = GetSessionCurrentUserInfo.sRealName;//用户姓名sqlList.Add(strInsertLog);paraList.Add(new SqlParameter[] { new SqlParameter("@sImportVillageCode",sImportVillageCode),new SqlParameter("@sImportVillageName",sImportVillageName),new SqlParameter("@sUserName",sUserName),new SqlParameter("@sRealName",sRealName),});#endregion#endregiontry{bInitResult = SqlHelper.ExecuteTrans(sqlList, paraList);}catch (Exception){bInitResult = false;mes = "家庭人口信息生成失败!";throw;}OutputResult(bInitResult, mes);}/// <summary>/// 根据字典名称获取字典编码 /// </summary>/// <param name="tablecode"></param>/// <param name="name"></param>/// <returns></returns>private string GetDictCode(string tablecode, string name){string sql = "select top 1 scode from baseinfo_dict where sname='" + name + "' and stablecode='" + tablecode + "' and ideletemark=0 and iuse=1";var obj = SqlHelper.ExecuteScalar(sql);if (obj == null)return "";return obj.ToString();}/// <summary>/// 身份证号转换日期/// </summary>/// <param name="sIDCard"></param>/// <returns></returns>private DateTime GetDateFromIDCard(string sIDCard){sIDCard = sIDCard.Trim();if (!string.IsNullOrEmpty(sIDCard)){string tmp = "";DateTime dResult = DateTime.Parse("1900-01-01");if (sIDCard.StartsWith("R") || sIDCard.StartsWith("r")){return dResult;}if (sIDCard.Length == 18){tmp = sIDCard.Substring(6, 8);//截取生日信息tmp = tmp.Insert(4, "-").Insert(7, "-");//在字符串相应位置插入字符}else if (sIDCard.Length == 15){//15位身份证号码tmp = sIDCard.Substring(6, 2);if (int.Parse(tmp) < 10)tmp = "20" + tmp;elsetmp = "19" + tmp;tmp = tmp + '-' + sIDCard.Substring(8, 2) + '-' + sIDCard.Substring(10, 2);}if (DateTime.TryParse(tmp, out dResult)){return dResult;}}return DateTime.Parse("1900-01-01");}#endregion}
}

数据导入(excel读取,存储进数据库【多表】)相关推荐

  1. layui ajax方式导入excel并且存储到数据库中

    首先得引用layui的js jsp页面:<button type="button" class="layui-btn" id="importEx ...

  2. 转:[Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!...

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  3. python excel模板 生成excel表格_python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图...

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 #coding=utf-8 from openpyxl importload_workbookfro ...

  4. ExcelToMySQL-批量导入Excel文件到MySQL数据库的自动化工具

    ExcelToMySQL:批量导入Excel文件到MySQL数据库的自动化工具 简介 ExcelToMySQL 是一个可以批量导入excel到数据库(mysql/oracle/sqlserver)的自 ...

  5. ExcelToOracle:批量导入Excel文件到Oracle数据库的自动化工具

    ExcelToOracle:批量导入Excel文件到Oracle数据库的自动化工具 简介 ExcelToOracle 是一个可以批量导入excel到数据库(mysql/oracle/sqlserver ...

  6. python导入excel数据-如何把python中的数据导入excel

    python将数据导入excel的方法:1.在python官网下载xlrd第三方库:2.利用xlrd中的open_workbook函数读入excel文件,即可在python中导入excel数据. 一. ...

  7. matlab数组 xp,windowsxp系统将matlab数据导入excel的方法

    matlab是一款非常强大的商业数学软件,不仅能够读取Excel表格中的数据,还支持将matlab中的变量导入到Excel表格中.接下来,系统城小编就为大家分享windowsxp系统将matlab数据 ...

  8. java txt数据导入excel,java导入excle文件《如何用java 将txt数据导入excel》

    如何用java 将txt数据导入excel 代码如下: import java.io.*; import jxl.*; import jxl.write.*; public class CreateX ...

  9. 超大数据量存储常用数据库分表分库算法总结

    这篇文章主要介绍了超大数据量存储常用数据库分表分库算法总结,本文讲解了按自然时间来分表/分库.按数字类型hash分表/分库.按md5值来分表/分库三种方法,以及分表所带来的问题探讨,需要的朋友可以参考 ...

最新文章

  1. 【剑指offer】面试题56 - II:数组中数字出现的次数 II(Java)
  2. jquery中的ajax 网络请求
  3. mysql导入1366_mysql source导入报错ERROR 1366的解决方法
  4. 洛谷 P2515 [HAOI2010]软件安装 解题报告
  5. (数组) leetcode 189. Rotate Array
  6. 19. Treat class design as type design
  7. 眼科准分子激光治疗仪行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. VS2017编译geos
  9. 日本知名汽车零部件公司巡礼系列之株式会社67
  10. linux修改只读文件
  11. The More You Know: Using Knowledge Graphs for Image Classification 论文总结
  12. 基于异构网络节点表示的推荐系统(HERec)
  13. 怎么把视频内存压缩小?视频内存过大怎么压缩?
  14. python可视化库matplotlib_环境搭建 | Python 数据可视化库 Matplotlib 快速入门之一-阿里云开发者社区...
  15. Ubuntu 22.04下载安装VMware Workstation Pro 17
  16. 【基于Leaflet和Canvas绘图的前端大量栅格数据渲染】
  17. threejs学习笔记:CSS2DObject 2d文字渲染
  18. 基于java的果蔬在线销售系统/农产品销售系统
  19. 【2019-数据结构-课程设计】完成
  20. smcsuperio黑苹果_基于OpenCore0.6.1的黑苹果安装,小白也能看

热门文章

  1. win10系统服务器错误怎么解决方法,分享win10系统提示内部服务器错误的解决方案...
  2. 新视野大学英语(1)课本单词汇总
  3. 8583报文MAC验证实现过程
  4. vue3使用watch失效的一个原因
  5. 福禄克FLUKE TIX650红外热像仪3.5英寸高像素大屏
  6. python指纹识别算法_shazam听歌识曲算法解析+python实现-2 生成指纹
  7. node 小程序 php,基于Node.js+MySQL开发的开源微信小程序B2C商城(页面高仿网易严选)...
  8. 2020研究洞察:新消费品牌的8大增长驱动力
  9. 女生适合学软件开发吗?
  10. 小程序开发学习一:开发语言解析