通过数据表的DataSet输出XML做数据比对
摘要:
1、通过DataSetConvertToByStr实现XML转成DataSet
2、通过 关键字做逐条数据比对
原文链接:
界面效果:
![](https://img2020.cnblogs.com/blog/989719/202102/989719-20210205172911970-1383260906.png)
![](https://img2020.cnblogs.com/blog/989719/202102/989719-20210205172929293-429048125.png)
相关代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="WebForms_WebPages_Blanks_WebTools_Dbs_DataCompares_Default" ValidateRequest="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <script language="javascript" type="text/javascript" src="<%=strPhyPath %>/JS/jquery-1.8.3.min.js"></script> <script language="javascript" type="text/javascript" src="<%=strPhyPath %>/JS/CreateCode.js"></script> <script language="javascript" type="text/javascript" src="<%=strPhyPath %>/JS/DateOper.js"></script> <style type="text/css"> .slxdemo-oneline { -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-right-colors: none; -moz-border-top-colors: none; border-collapse: collapse; border-color: #ccc; border-image: none; border-style: solid; border-width: 1px 0 0 1px; margin-top: 0px; } .slxdemo-oneline th, .slxdemo-oneline td { -moz-border-bottom-colors: none; -moz-border-left-colors: none; -moz-border-right-colors: none; -moz-border-top-colors: none; border-color: #ccc; border-image: none; border-style: solid; border-width: 0 1px 1px 0; padding: 6px; size: 14px; } a.DefaultHref { color: #0000FF; text-decoration: none; } a.DefaultHref:link { color: #0000FF; text-decoration: none; } a.DefaultHref:hover { color: #0000FF; text-decoration: underline; } a.DefaultHref:visited { color: #0000FF; text-decoration: none; } </style> </head> <body> <form id="form1" runat="server"> <div> <table border="0" cellpadding="0" cellspacing="5" width="100%"> <tr> <td colspan="1"> </td> <td colspan="1"> <b>通过数据表的DataSet输出XML做数据比对</b> | <a href="Default.aspx" class="DefaultHref">刷新</a> </td> </tr> <tr> <td align="right" valign="top"> 执行结果: </td> <td colspan="3"> <asp:Label ID="lbl_ResultTip" runat="server"></asp:Label> </td> </tr> <tr> <td align="right" style="width: 100px;"> 源数据: </td> <td colspan="1"> <asp:TextBox ID="txt_Source" runat="server" Width="99%" Height="130px" TextMode="MultiLine"></asp:TextBox> </td> </tr> <tr> <td align="right" style="width: 100px;"> 目标数据: </td> <td colspan="1"> <asp:TextBox ID="txt_Target" runat="server" Width="99%" Height="130px" TextMode="MultiLine"></asp:TextBox> </td> </tr> <tr> <td align="right" style="width: 100px;"> 关键字: </td> <td colspan="1"> <asp:TextBox ID="txt_PkName" runat="server" Width="99%"></asp:TextBox> <br /> (组合关键字用|做分隔) </td> </tr> <tr> <td align="right" style="width: 100px;"> 比较字段: </td> <td colspan="1"> <asp:TextBox ID="txt_DcName" runat="server" Width="99%" Height="100px" TextMode="MultiLine"></asp:TextBox> <br /> (组合关键字用|做分隔) </td> </tr> <tr> <td align="right" style="width: 100px; height: 35px;"> </td> <td colspan="1"> <asp:Button ID="btn_SourceDcName" runat="server" Text="源字段清单" OnClick="btn_SourceDcName_Click" /> <asp:Button ID="btn_SourceData" runat="server" Text="源数据" OnClick="btn_SourceData_Click" /> <asp:Button ID="btn_SourceRowCount" runat="server" Text="源记录数" OnClick="btn_SourceRowCount_Click" /> <asp:Button ID="btn_TargetDcName" runat="server" Text="目标字段清单" OnClick="btn_TargetDcName_Click" /> <asp:Button ID="btn_TargetData" runat="server" Text="目标数据" OnClick="btn_TargetData_Click" /> <asp:Button ID="btn_TargetRowCount" runat="server" Text="目标记录数" OnClick="btn_TargetRowCount_Click" /> <asp:Button ID="btn_Example" runat="server" Text="样例" OnClick="btn_Example_Click" /> | <a href="Default.aspx" class="DefaultHref">刷新</a> </td> </tr> <tr> <td align="right" style="width: 100px; height: 35px;"> </td> <td colspan="1"> <asp:Button ID="btn_SourceMore" runat="server" Text="源多的数据" OnClick="btn_SourceMore_Click" /> <asp:Button ID="btn_TargetMore" runat="server" Text="目标多的数据" OnClick="btn_TargetMore_Click" /> <asp:Button ID="btn_EqualData" runat="server" Text="相同的数据" OnClick="btn_EqualData_Click" /> <asp:Button ID="btn_NoEqualData" runat="server" Text="不相同的数据" OnClick="btn_NoEqualData_Click" /> <asp:Button ID="btn_DcCompare" runat="server" Text="字段是否相同" OnClick="btn_DcCompare_Click" /> </td> </tr> <tr> <td align="right" valign="top"> 输出: </td> <td colspan="3"> <asp:Literal ID="lt_Result" runat="server"></asp:Literal> <asp:TextBox ID="txt_Result" Visible="false" runat="server" Width="99%" Height="130px" TextMode="MultiLine"></asp:TextBox> </td> </tr> </table> </div> </form> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Data; using System.Text; using System.IO; public partial class WebForms_WebPages_Blanks_WebTools_Dbs_DataCompares_Default : PageBase { #region 样例数据 /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_Example_Click(object sender, EventArgs e) { txt_PkName.Text = "Guid"; txt_Source.Text = @" <NewDataSet> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>60cafcf3deb7458e90247bfc18aa846b</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:03:46.3125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:03:46.3125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:03:46+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>数量测试2</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>47a734fb88a14abd8ca0d82896d7d2f1</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:16:22.703125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:16:22.703125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:16:22+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>下次下发任务,是否情况此处内容?</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>1c109716f32140b88bec1e2e4622bcad</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T15:44:56.015625+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T15:44:56.015625+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T15:44:56+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>121212</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>9a6e271b22f94953bfc0cb55997ec477</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:03:31.921875+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:03:31.921875+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:03:31+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>数量测试1</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>a5b5763c85704fa2ab824c2a39649c6f</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T11:30:37.02593+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T11:30:37.02593+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T11:30:37+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>啊啊啊啊啊</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>e4899af22ac44fe8bec6085223fe218d</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:34:56.500608+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:34:56.500608+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:34:56+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>qqqqqqqqqq</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>f964b564b37b4e6f9cf70fa65802a0bc</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:37:35.601659+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:37:35.601659+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:37:35+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>zzzzzzzzzzzzz</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>5a2563ee706945168ae7837a931321f6</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-01T16:36:43.569723+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-01T16:36:43.569723+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-01T16:36:43+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>202020</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>e0dc6581344447e4b36e4d9d11f0134c</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T14:57:01.6875+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T14:57:01.6875+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T14:57:01+08:00</ARCHIVE_DATE> <JOB_GROUP>LSSJ</JOB_GROUP> <JOB>LSSJ</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>撤销看APP情况</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>5913ee4a0f404e09bd39054233a906a4</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T14:19:04.453125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T14:19:04.453125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T14:19:04+08:00</ARCHIVE_DATE> <JOB_GROUP>TBDRW</JOB_GROUP> <JOB>TBDRW</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>1111111111</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>d8621396e58c4c9fbf3d1db5db0708a9</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:34:09.736506+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:34:09.736506+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:34:09+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>eeeeeee</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>0dd8b3e4521a41b19477f5af64dd0033</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T09:49:41.596452+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T09:49:41.596452+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T09:49:41+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>6666</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>73d9bc57540241a783028463de591e64</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T10:01:01.899396+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T10:01:01.899396+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T10:01:01+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>0010313</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>44ebd4cda4ae45e7ba0f945578c0fa4c</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-01T15:02:32.507773+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-01T15:02:32.507773+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-01T15:02:32+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>001</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>d8e40354480e42f3bb3c3a1bdd557d62</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T09:33:05.902947+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T09:33:05.902947+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T09:33:05+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>qqqqqqqqqqqqqq</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>f1ef5340e8254aeaaf0d236680ea8fd6</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-01T16:18:24.286178+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-01T16:18:24.286178+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-01T16:18:24+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>16161616</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> </NewDataSet> "; txt_Target.Text = @" <NewDataSet> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>07af40d4960a4b7baf93bd6f9443f883</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T14:57:30.125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T14:57:30.125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T14:57:30+08:00</ARCHIVE_DATE> <JOB_GROUP>TBDRW</JOB_GROUP> <JOB>TBDRW</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>随便来点</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>60cafcf3deb7458e90247bfc18aa846b</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:03:46.3125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:03:46.3125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:03:46+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>数量测试2</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>47a734fb88a14abd8ca0d82896d7d2f1</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:16:22.703125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:16:22.703125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:16:22+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>下次下发任务,是否情况此处内容?</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>1c109716f32140b88bec1e2e4622bcad</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T15:44:56.015625+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T15:44:56.015625+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T15:44:56+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>121212</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>9a6e271b22f94953bfc0cb55997ec477</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T15:03:31.921875+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T15:03:31.921875+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T15:03:31+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>数量测试1</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>a5b5763c85704fa2ab824c2a39649c6f</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T11:30:37.02593+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T11:30:37.02593+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T11:30:37+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>啊啊啊啊啊</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>e4899af22ac44fe8bec6085223fe218d</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:34:56.500608+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:34:56.500608+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:34:56+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>qqqqqqqqqq</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>f964b564b37b4e6f9cf70fa65802a0bc</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:37:35.601659+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:37:35.601659+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:37:35+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>zzzzzzzzzzzzz</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>5a2563ee706945168ae7837a931321f6</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-01T16:36:43.569723+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-01T16:36:43.569723+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-01T16:36:43+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>202020</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>e0dc6581344447e4b36e4d9d11f0134c</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T14:57:01.6875+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T14:57:01.6875+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T14:57:01+08:00</ARCHIVE_DATE> <JOB_GROUP>LSSJ</JOB_GROUP> <JOB>LSSJ</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>撤销看APP情况</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>5913ee4a0f404e09bd39054233a906a4</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T14:19:04.453125+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T14:19:04.453125+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T14:19:04+08:00</ARCHIVE_DATE> <JOB_GROUP>TBDRW</JOB_GROUP> <JOB>TBDRW</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>1111111111</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>d8621396e58c4c9fbf3d1db5db0708a9</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T09:34:09.736506+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T09:34:09.736506+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T09:34:09+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>eeeeeee</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>0dd8b3e4521a41b19477f5af64dd0033</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-04T09:49:41.596452+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-04T09:49:41.596452+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-04T09:49:41+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>6666</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>3e67f689e14e4539bdb3a46dde12814c</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-06T14:18:01.21875+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-06T14:18:01.21875+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-06T14:18:01+08:00</ARCHIVE_DATE> <JOB_GROUP>TBDRW</JOB_GROUP> <JOB>TBDRW</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>1417</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>73d9bc57540241a783028463de591e64</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T10:01:01.899396+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T10:01:01.899396+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T10:01:01+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LLLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>0010313</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>45ebd4cda4ae45e7ba0f945578c0fa4c</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-01T15:02:32.507773+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-01T15:02:32.507773+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-01T15:02:32+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>001</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> <BS_NOFLIGHTJOB_ALLOCATION> <GUID>d8e40354480e42f3bb3c3a1bdd557d62</GUID> <INSERT_OPERATOR>A070388</INSERT_OPERATOR> <INSERT_TIME>2019-03-05T09:33:05.902947+08:00</INSERT_TIME> <UPDATE_TIME>2019-03-05T09:33:05.902947+08:00</UPDATE_TIME> <VALIDITY>1</VALIDITY> <ARCHIVE_DATE>2019-03-05T09:33:05+08:00</ARCHIVE_DATE> <JOB_GROUP>LSLJC</JOB_GROUP> <JOB>LSLJC</JOB> <STATUS>Allocation</STATUS> <INITIATIVE>0</INITIATIVE> <REQUIREMENT>qqqqqqqqqqqqqq</REQUIREMENT> <OVERDUE>0</OVERDUE> <ACCEPT_THRESHOLD>10</ACCEPT_THRESHOLD> </BS_NOFLIGHTJOB_ALLOCATION> </NewDataSet> "; } #endregion 样例数据 #region DataSetConvertToByStr|通过XML(字符串形式)转成DataSet /// <summary> /// 通过XML(字符串形式)转成DataSet /// </summary> /// <param name="str"></param> /// <returns></returns> private DataSet DataSetConvertToByStr(string str) { DataSet ds = new DataSet(); using (StringReader xmlSR = new StringReader(str)) { ds.ReadXml(xmlSR, XmlReadMode.InferTypedSchema); //忽视任何内联架构,从数据推断出强类型架构并加载数据。如果无法推断,则解释成字符串数据 if (ds.Tables.Count > 0) return ds; else return null; } } #endregion DataSetConvertToByStr|通过XML(字符串形式)转成DataSet /// <summary> /// /// </summary> /// <param name="strMsg"></param> /// <param name="succFlag"></param> protected void SetResultTip(string strMsg, bool succFlag) { if (succFlag) { lbl_ResultTip.ForeColor = System.Drawing.Color.Blue; } else { lbl_ResultTip.ForeColor = System.Drawing.Color.Red; } lbl_ResultTip.Text = strMsg + " " + DateTime.Now.ToString("HH:mm:ss"); } #region 保存 /// <summary> /// 保存 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_Ok_Click(object sender, EventArgs e) { try { // btnOkClick(); } catch (Exception err) { SetResultTip(err.Message, false); } } #endregion 保存 /// <summary> /// /// </summary> /// <param name="str"></param> /// <returns></returns> protected bool ListDcName(string str) { if (str == null || str.Length == 0 || str.Trim().Length == 0) { SetResultTip("请输入数据", false); return false; } DataSet ds = DataSetConvertToByStr(str.Trim()); if (ds == null || ds.Tables.Count ==0) { SetResultTip("数据不正确", false); return false; } DataTable dt = ds.Tables[0]; StringBuilder theResult = new StringBuilder(); foreach (DataColumn dc in dt.Columns) { theResult.AppendLine(dc.ColumnName); } txt_Result.Visible = true; txt_Result.Text = theResult.ToString(); SetResultTip("成功", true); return true; } /// <summary> /// /// </summary> /// <param name="str"></param> /// <returns></returns> protected bool DataRowCount(string str) { if (str == null || str.Length == 0 || str.Trim().Length == 0) { SetResultTip("请输入数据", false); return false; } DataSet ds = DataSetConvertToByStr(str.Trim()); if (ds == null || ds.Tables.Count == 0) { SetResultTip("数据不正确", false); return false; } DataTable dt = ds.Tables[0]; lt_Result.Text = dt.Rows.Count.ToString(); SetResultTip("成功", true); return true; } #region 源字段清单 /// <summary> /// 源字段清单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_SourceDcName_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Source.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入源数据", false); return; } ListDcName(str); } catch (Exception err) { SetResultTip(err.Message, false); } } #endregion 源字段清单 #region 目标字段清单 /// <summary> /// 目标字段清单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_TargetDcName_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Target.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入目标数据", false); return; } ListDcName(str); } catch (Exception err) { SetResultTip(err.Message, false); } } #endregion 目标字段清单 #region 源记录数 /// <summary> /// 源记录数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_SourceRowCount_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Source.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入源数据", false); return; } DataRowCount(str); } catch (Exception err) { SetResultTip(err.Message, false); } } #endregion 源记录数 #region 目标记录数 /// <summary> /// 目标记录数 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_TargetRowCount_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Target.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入目标数据", false); return; } DataRowCount(str); } catch (Exception err) { SetResultTip(err.Message, false); } } #endregion 目标记录数 #region DataSetToHtmlTable:DataSet转成HTML的Table输出 private const string P__SQLROWNUMBERVALUE = "P__SQLROWNUMBERVALUE"; /// <summary> /// DataSet转成HTML的Table输出 - DataSetToHtmlTable + /// </summary> /// <param name="ds"></param> /// <returns></returns> public string DataSetToHtmlTable(System.Data.DataSet ds) { return DataSetToHtmlTable(ds, -98, true, null); } /// <summary> /// DataSet转成HTML的Table输出 - DataSetToHtmlTable + /// </summary> /// <param name="ds"></param> /// <param name="showDcNameList">显示的字段列表</param> /// <returns></returns> public string DataSetToHtmlTable(System.Data.DataSet ds, List<string> showDcNameList) { return DataSetToHtmlTable(ds, -98, true, showDcNameList); } /// <summary> /// DataSet转成HTML的Table输出 - DataSetToHtmlTable + /// </summary> /// <param name="ds"></param> /// <param name="needConvertHtml">是否需要转移Html内容</param> /// <returns></returns> public string DataSetToHtmlTable(System.Data.DataSet ds, bool needConvertHtml) { return DataSetToHtmlTable(ds, -98, needConvertHtml, null); } /// <summary> /// DataSet转成HTML的Table输出 - DataSetToHtmlTable + /// </summary> /// <param name="ds"></param> /// <param name="widthValue">表格宽度|如:-98=98%;120=120px</param> /// <param name="needConvertHtml">是否需要转移Html内容</param> /// <param name="showDcNameList">显示的字段列表</param> /// <returns></returns> public string DataSetToHtmlTable(System.Data.DataSet ds, int widthValue, bool needConvertHtml,List<string> showDcNameList) { if (ds == null || ds.Tables.Count == 0) { throw new Exception ( "方法:" + System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName + " " + System.Reflection.MethodBase.GetCurrentMethod().ToString() + " 发生异常:" + "传入参数:DataSet ds为null。" ); } string widthStyle = ""; if (widthValue > 0) { widthStyle = " width:" + widthValue.ToString() + "px;"; } else if (widthValue < 0) { widthStyle = " width:" + (-widthValue).ToString() + "%;"; } System.Data.DataTable dt = ds.Tables[0]; StringBuilder theResult = new StringBuilder(); theResult.Append(@"<table style=""background-color: #CDCDCD; font-family: 仿宋;" + widthStyle + @""" align=""center"" border=""0"" cellpadding=""1"" cellspacing=""1"">"); int rowIndex = 0; bool noAllDcFlag = false; if (showDcNameList != null && showDcNameList.Count > 0) { noAllDcFlag = true; } string strTmp = null; string columnName = null; object oValue = null; DateTime dtValue = DateTime.MinValue; if (needConvertHtml) { theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append("序号"); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } strTmp = columnName; strTmp = strTmp.Replace("<", "<").Replace(">", ">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); foreach (System.Data.DataRow dr in dt.Rows) { ++rowIndex; theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(rowIndex.ToString()); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } oValue = dr[dc.ColumnName]; if (oValue == null || oValue == DBNull.Value) { strTmp = ""; } else { if (oValue is DateTime) { dtValue = (DateTime)oValue; if (dtValue.Date == dtValue) { strTmp = dtValue.ToString("yyyy-MM-dd"); } else { strTmp = dtValue.ToString("yyyy-MM-dd HH:mm:ss"); } } else { strTmp = oValue.ToString(); } } strTmp = strTmp.Replace("<", "<").Replace(">", ">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); } } else { theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append("序号"); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append(dc.ColumnName); theResult.Append("</td>"); } theResult.Append("</tr>"); foreach (System.Data.DataRow dr in dt.Rows) { ++rowIndex; theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(rowIndex.ToString()); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } oValue = dr[dc.ColumnName]; if (oValue == null || oValue == DBNull.Value) { strTmp = ""; } else { if (oValue is DateTime) { dtValue = (DateTime)oValue; if (dtValue.Date == dtValue) { strTmp = dtValue.ToString("yyyy-MM-dd"); } else { strTmp = dtValue.ToString("yyyy-MM-dd HH:mm:ss"); } } else { strTmp = oValue.ToString(); } } theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); } } theResult.Append("</table>"); return theResult.ToString(); } #endregion DataSetToHtmlTable:DataSet转成HTML的Table输出 #region StrToListStr:多行字符串转成List-string的值输出 /// <summary> /// 多行字符串转成List-string的值输出 /// </summary> /// <param name="str">字符串</param> /// <param name="toLowerFlag">是否转小写</param> /// <returns></returns> public List<string> StrToListStr(string str,bool toLowerFlag) { List<string> theResult = new List<string>(); if (str == null) return theResult; str = str.Trim(); if (str.Length == 0) return theResult; string[] sA = str.Split('\n'); string strTmp = null; foreach (string s in sA) { if (s == null) continue; strTmp = s.Trim(); if (strTmp.Length == 0) continue; if (toLowerFlag) strTmp = strTmp.ToLower(); if (theResult.Contains(strTmp)) continue; theResult.Add(strTmp); } return theResult; } #endregion StrToListStr:多行字符串转成List-string的值输出 /// <summary> /// DataSet转成HTML的Table输出 - DataSetToHtmlTable + /// </summary> /// <param name="ds"></param> /// <param name="widthValue">表格宽度|如:-98=98%;120=120px</param> /// <param name="needConvertHtml">是否需要转移Html内容</param> /// <param name="showDcNameList">显示的字段列表</param> /// <returns></returns> public string DataSetToHtmlTableForNoEqual ( System.Data.DataSet ds, int widthValue, List<string> showDcNameList ) { if (ds == null || ds.Tables.Count == 0) { throw new Exception ( "方法:" + System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName + " " + System.Reflection.MethodBase.GetCurrentMethod().ToString() + " 发生异常:" + "传入参数:DataSet ds为null。" ); } string widthStyle = ""; if (widthValue > 0) { widthStyle = " width:" + widthValue.ToString() + "px;"; } else if (widthValue < 0) { widthStyle = " width:" + (-widthValue).ToString() + "%;"; } System.Data.DataTable dt = ds.Tables[0]; int rowCount = dt.Rows.Count; if (rowCount % 2 == 1) { return "数据错误,数据应该是2的倍数"; } StringBuilder theResult = new StringBuilder(); theResult.Append(@"<table style=""background-color: #CDCDCD; font-family: 仿宋;" + widthStyle + @""" align=""center"" border=""0"" cellpadding=""1"" cellspacing=""1"">"); int rowIndex = 0; bool noAllDcFlag = false; if (showDcNameList != null && showDcNameList.Count > 0) { noAllDcFlag = true; } string strTmp = null; string columnName = null; object oValue = null; DateTime dtValue = DateTime.MinValue; DataRow drOne = null; DataRow drTwo = null; bool compareFlag = false; int rowSpan = 1; bool needConvertHtml = true; if (needConvertHtml) { theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append("序号"); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } strTmp = columnName; strTmp = strTmp.Replace("<", "<").Replace(">", ">"); theResult.Append(@"<td style=""background-color: #FFFFFF; font-size: 18px; font-weight: bold; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; text-align: center;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); for(int i = 0; i <rowCount;i=i+2) { drOne = dt.Rows[i]; drTwo = dt.Rows[i + 1]; ++rowIndex; theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); theResult.Append(@"<td rowspan=""2"" style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(rowIndex.ToString()); theResult.Append("</td>"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } compareFlag = ObjCompare(drOne[columnName], drTwo[columnName]); if (compareFlag) { rowSpan = 2; } else { rowSpan = 1; } oValue = drOne[columnName]; if (oValue == null || oValue == DBNull.Value) { strTmp = ""; } else { if (oValue is DateTime) { dtValue = (DateTime)oValue; if (dtValue.Date == dtValue) { strTmp = dtValue.ToString("yyyy-MM-dd"); } else { strTmp = dtValue.ToString("yyyy-MM-dd HH:mm:ss"); } } else { strTmp = oValue.ToString(); } } strTmp = strTmp.Replace("<", "<").Replace(">", ">"); theResult.Append(@"<td rowspan=""" + rowSpan.ToString() + @""" style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); theResult.Append(@"<tr style=""background-color: #FFFFFF;"">"); foreach (System.Data.DataColumn dc in dt.Columns) { columnName = dc.ColumnName; if (columnName.Trim().ToUpper() == P__SQLROWNUMBERVALUE) { continue; } if (noAllDcFlag) { if (!showDcNameList.Contains(columnName.ToLower())) continue; } compareFlag = ObjCompare(drOne[columnName], drTwo[columnName]); if (compareFlag) { continue; } rowSpan = 1; oValue = drTwo[columnName]; if (oValue == null || oValue == DBNull.Value) { strTmp = ""; } else { if (oValue is DateTime) { dtValue = (DateTime)oValue; if (dtValue.Date == dtValue) { strTmp = dtValue.ToString("yyyy-MM-dd"); } else { strTmp = dtValue.ToString("yyyy-MM-dd HH:mm:ss"); } } else { strTmp = oValue.ToString(); } } strTmp = strTmp.Replace("<", "<").Replace(">", ">"); theResult.Append(@"<td rowspan=""" + rowSpan.ToString() + @""" style=""background-color: #FFFFFF; font-size: 14px; font-family: 宋体; line-height: 20pt; vertical-align: middle; line-height: 20pt; padding-left: 5px;"" align=""center"" height=""30px"">"); theResult.Append(strTmp); theResult.Append("</td>"); } theResult.Append("</tr>"); } } theResult.Append("</table>"); return theResult.ToString(); } /// <summary> /// /// </summary> /// <param name="str"></param> /// <returns></returns> protected bool ShowHtmlData(string str) { if (str == null || str.Length == 0 || str.Trim().Length == 0) { SetResultTip("请输入数据", false); return false; } DataSet ds = DataSetConvertToByStr(str.Trim()); if (ds == null || ds.Tables.Count == 0) { SetResultTip("数据不正确", false); return false; } string dcName = txt_DcName.Text.Trim(); List<string> showDcNameList = null; if (dcName.Length > 0) { showDcNameList = StrToListStr(dcName, true); } string strHtml = DataSetToHtmlTable(ds, showDcNameList); lt_Result.Text = strHtml; SetResultTip("成功", true); return true; } protected void btn_TargetData_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Target.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入目标数据", false); return; } ShowHtmlData(str); } catch (Exception err) { SetResultTip(err.Message, false); } } /// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_SourceData_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; string str = txt_Source.Text.Trim(); if (str.Length == 0) { SetResultTip("请输入源数据", false); return; } ShowHtmlData(str); } catch (Exception err) { SetResultTip(err.Message, false); } } public enum EmOper { /// <summary> /// 源多的数据 /// </summary> 源多的数据 = 1, /// <summary> /// 目标多的数据 /// </summary> 目标多的数据, /// <summary> /// 相同的数据 /// </summary> 相同的数据, /// <summary> /// 不相同的数据 /// </summary> 不相同的数据, /// <summary> /// 字段比较 /// </summary> 字段比较 } /// <summary> /// /// </summary> /// <param name="sourceFlag"></param> /// <param name="dt"></param> /// <param name="sA"></param> /// <returns></returns> public bool DataTableContainColumns(bool sourceFlag,DataTable dt,List<string> sA) { if (sA == null) return true; string strTmp = null; foreach (string s in sA) { if (s == null || s.Length == 0) continue; strTmp = s.Trim(); if(strTmp.Length ==0) continue; if (!dt.Columns.Contains(strTmp)) { if (sourceFlag) { SetResultTip("源不包含" + strTmp + "字段", false); } else { SetResultTip("目标不包含" + strTmp + "字段", false); } return false; } } return true; } /// <summary> /// /// </summary> /// <param name="sA"></param> /// <returns></returns> public List<string> StrArrayToStrList(string[] sA) { List<string> theResult = new List<string>(); if (sA == null || sA.Length == 0) return theResult; string strTmp = null; foreach (string s in sA) { if (s == null) continue; strTmp = s.Trim(); if (theResult.Contains(strTmp)) continue; theResult.Add(strTmp); } return theResult; } /// <summary> /// 不考虑多对一的情况 /// </summary> /// <param name="drData"></param> /// <param name="dt"></param> /// <param name="pkList"></param> /// <returns></returns> protected DataRow DataRowFind(DataRow drData, DataTable dt, List<string> pkList) { bool findFlag = false; bool compareFlag = false; foreach (DataRow dr in dt.Rows) { findFlag = true; foreach (string pk in pkList) { compareFlag = ObjCompare(dr[pk], drData[pk]); if(!compareFlag) { findFlag = false; break; } } if (findFlag) { return dr; } } return null; } /// <summary> /// /// </summary> /// <param name="objOne"></param> /// <param name="objTwo"></param> /// <returns></returns> protected bool ObjCompare(object objOne, object objTwo) { bool oneIsEmpty = false; bool twoIsEmpty = false; if (objOne == null || objOne == DBNull.Value || objOne.ToString().Length == 0) { oneIsEmpty = true; } if (objTwo == null || objTwo == DBNull.Value || objTwo.ToString().Length == 0) { twoIsEmpty = true; } if (oneIsEmpty) { if (twoIsEmpty) return true; else return false; } if (twoIsEmpty) { if (oneIsEmpty) return true; else return false; } string strOne = objOne.ToString(); string strTwo = objTwo.ToString(); if (strOne == strTwo) return true; return false; } /// <summary> /// /// </summary> /// <param name="drOne"></param> /// <param name="drTwo"></param> /// <param name="dcList"></param> /// <returns></returns> protected bool DataRowCompare(DataRow drOne, DataRow drTwo, List<string> dcList) { bool noAllDcList = false; if (dcList != null && dcList.Count > 0) { noAllDcList = true; } bool compareFlag = false; string dcName = null; DataTable dtOne = drOne.Table; DataTable dtTwo = drTwo.Table; if (noAllDcList) { foreach (string s in dcList) { dcName = s; if (dcName == null || dcName.Length == 0) continue; dcName = dcName.Trim(); if (dcName.Length == 0) continue; if (!dtOne.Columns.Contains(dcName)) return false; if (!dtTwo.Columns.Contains(dcName)) return false; compareFlag = ObjCompare(drOne[dcName], drTwo[dcName]); if (!compareFlag) return false; } } else { foreach (DataColumn dc in dtOne.Columns) { dcName = dc.ColumnName; if (!dtTwo.Columns.Contains(dcName)) return false; compareFlag = ObjCompare(drOne[dcName], drTwo[dcName]); if (!compareFlag) return false; } } return true; } /// <summary> /// /// </summary> /// <param name="em"></param> /// <returns></returns> public bool DataCompareOper(EmOper em) { string strSource = txt_Source.Text.Trim(); if (strSource.Length == 0) { SetResultTip("请输入源数据", false); return false; } string strTarget = txt_Target.Text.Trim(); if (strTarget.Length == 0) { SetResultTip("请输入目标数据", false); return false; } string pkName = txt_PkName.Text.Trim(); if (pkName.Length == 0) { SetResultTip("请输入比较关键字", false); return false; } string[] pkA = pkName.Split('|'); List<string> pkList = StrArrayToStrList(pkA); string dcName = txt_DcName.Text.Trim(); List<string> dcList = null; if (dcName.Length > 0) { dcList = StrToListStr(dcName, false); } DataSet dsSource = DataSetConvertToByStr(strSource); DataSet dsTarget = DataSetConvertToByStr(strTarget); if (dsSource == null || dsSource.Tables.Count == 0 || dsSource.Tables[0].Rows.Count == 0) { SetResultTip("源数据为空", false); return false; } if (dsTarget == null || dsTarget.Tables.Count == 0 || dsTarget.Tables[0].Rows.Count == 0) { SetResultTip("目标数据为空", false); return false; } DataTable dtSource = dsSource.Tables[0]; DataTable dtTarget = dsTarget.Tables[0]; bool resultFlag = DataTableContainColumns(true, dtSource, pkList); if (!resultFlag) return false; resultFlag = DataTableContainColumns(false, dtTarget, pkList); if (!resultFlag) return false; resultFlag = DataTableContainColumns(true, dtSource, dcList); if (!resultFlag) return false; resultFlag = DataTableContainColumns(false, dtTarget, dcList); if (!resultFlag) return false; DataSet dsResult = new DataSet(); DataTable dtResult = null; DataRow drFind = null; bool compareFlag = false; switch (em) { case EmOper.源多的数据: dtResult = dtSource.Clone(); foreach (DataRow drS in dtSource.Rows) { drFind = DataRowFind(drS, dtTarget, pkList); if (drFind == null) { dtResult.ImportRow(drS); } } if (dtResult.Rows.Count == 0) { lt_Result.Text = "没有记录"; return true; } dsResult.Tables.Add(dtResult); lt_Result.Text = DataSetToHtmlTable(dsResult, dcList); SetResultTip(em.ToString() + "操作成功", true); return true; case EmOper.目标多的数据: dtResult = dtTarget.Clone(); foreach (DataRow drS in dtTarget.Rows) { drFind = DataRowFind(drS, dtSource, pkList); if (drFind == null) { dtResult.ImportRow(drS); } } if (dtResult.Rows.Count == 0) { lt_Result.Text = "没有记录"; return true; } dsResult.Tables.Add(dtResult); lt_Result.Text = DataSetToHtmlTable(dsResult, dcList); SetResultTip(em.ToString() + "操作成功", true); return true; case EmOper.相同的数据: dtResult = dtSource.Clone(); foreach (DataRow drS in dtSource.Rows) { drFind = DataRowFind(drS, dtTarget, pkList); if (drFind == null) { continue; } compareFlag = DataRowCompare(drFind, drS, dcList); if (compareFlag) { dtResult.ImportRow(drS); } } if (dtResult.Rows.Count == 0) { lt_Result.Text = "没有记录"; return true; } dsResult.Tables.Add(dtResult); lt_Result.Text = DataSetToHtmlTable(dsResult, dcList); SetResultTip(em.ToString() + "操作成功", true); return true; case EmOper.不相同的数据: dtResult = dtSource.Clone(); foreach (DataRow drS in dtSource.Rows) { drFind = DataRowFind(drS, dtTarget, pkList); if (drFind == null) { continue; } compareFlag = DataRowCompare(drFind, drS, dcList); if (!compareFlag) { dtResult.ImportRow(drS); dtResult.ImportRow(drFind); } } if (dtResult.Rows.Count == 0) { lt_Result.Text = "没有记录"; return true; } dsResult.Tables.Add(dtResult); lt_Result.Text = DataSetToHtmlTableForNoEqual(dsResult, -99, dcList); SetResultTip(em.ToString() + "操作成功", true); return true; case EmOper.字段比较: StringBuilder sourceMoreSb = new StringBuilder(); StringBuilder targetMoreSb = new StringBuilder(); foreach (DataColumn dc in dtSource.Columns) { if (!dtTarget.Columns.Contains(dc.ColumnName)) { sourceMoreSb.AppendLine(dc.ColumnName); } } foreach (DataColumn dc in dtTarget.Columns) { if (!dtSource.Columns.Contains(dc.ColumnName)) { targetMoreSb.AppendLine(dc.ColumnName); } } StringBuilder compareResultSb = new StringBuilder(); string strCompareTmp = sourceMoreSb.ToString(); if (strCompareTmp.Length > 0) { compareResultSb.AppendLine("源多的字段:"); compareResultSb.AppendLine(strCompareTmp); } strCompareTmp = targetMoreSb.ToString(); if (strCompareTmp.Length > 0) { compareResultSb.AppendLine("目标多的字段:"); compareResultSb.AppendLine(strCompareTmp); } strCompareTmp = compareResultSb.ToString(); if (strCompareTmp.Length > 0) { txt_Result.Visible = true; txt_Result.Text = strCompareTmp; } else { lt_Result.Text = em.ToString()+"相同"; } SetResultTip(em.ToString() + "操作成功", true); return true; default: SetResultTip(em.ToString() + "未实现", false); return false; } } /// <summary> /// 不相同的数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_NoEqualData_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; DataCompareOper(EmOper.不相同的数据); } catch (Exception err) { SetResultTip(err.Message, false); } } /// <summary> /// 源多的数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_SourceMore_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; DataCompareOper(EmOper.源多的数据); } catch (Exception err) { SetResultTip(err.Message, false); } } /// <summary> /// 相同的数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_EqualData_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; DataCompareOper(EmOper.相同的数据); } catch (Exception err) { SetResultTip(err.Message, false); } } /// <summary> /// 目标多的数据 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_TargetMore_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; DataCompareOper(EmOper.目标多的数据); } catch (Exception err) { SetResultTip(err.Message, false); } } /// <summary> /// 字段是否相同 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btn_DcCompare_Click(object sender, EventArgs e) { try { lt_Result.Text = ""; txt_Result.Visible = false; DataCompareOper(EmOper.字段比较); } catch (Exception err) { SetResultTip(err.Message, false); } } protected void Page_Load(object sender, EventArgs e) { } }