private DataTable GetDqRqDiffs()
{
/*
Excel.Application app = new Excel.Application();
app.Visible = true;
MyCommon.FillDtToWorksheet(app, GetDqRqDiffs());
*
*/
DataTable dt = new DataTable();
dt.Columns.Add("rq", typeof(string));
dt.Columns.Add("dq", typeof(string));
dt.Columns.Add("lx", typeof(string));
dt.Columns.Add("sl", typeof(int));
dt.PrimaryKey = new DataColumn[] { dt.Columns["rq"], dt.Columns["dq"], dt.Columns["lx"] };
List<CompareItem> citems = new List<CompareItem>();
citems.Add(new CompareItem("YYJD", "XYJD", "YJDX"));
/*MUTIPLE*/
//遍历日期 整个HC数据
string sqlTables = "SELECT a.name tablename FROM hc.sys.tables a WHERE a.type='U' AND a.name LIKE 'HCYSJ%' ORDER BY a.name";
DataTable dtTables = MyCommon.GetDt(sqlTables, sqc.ConnectString);
for (int i = 0; i < dtTables.Rows.Count; i++)
{
string daySql = string.Format("SELECT b.DQDM,b.QMC,a.* FROM dbo.{0} a JOIN dbo.DQDM b ON a.YJDWDDM=b.WDDM", dtTables.Rows[i][0].ToString());
DataTable dayDt = MyCommon.GetDt(daySql, sqc.ConnectString);
for (int j = 0; j < dayDt.Rows.Count; j++)
{
for (int m = 0; m < citems.Count; m++)
{
CompareItem citem = citems[m];
if (!citem.IsSame(dayDt.Rows[j]))
{
//MyCommon.WriteLog(dayDt.Rows[j]["YYJD"].ToString() + " " + dayDt.Rows[j]["XYJD"].ToString());
string[] cols = { "rq", "dq", "lx" };
string[] values = { dayDt.Rows[j]["HCSJ"].ToString().Substring(0,10)
, dayDt.Rows[j]["QMC"].ToString()
,citem.Prompt};
DataRow dr = MyCommon.FindRowFromDt(dt, cols, values);
if (null == dr)
{
dr = dt.NewRow();
dr["rq"] = values[0];
dr["dq"] = values[1];
dr["lx"] = values[2];
dr["sl"] = 1;
dt.Rows.Add(dr);
}
else
{
dr["sl"] = int.Parse(dr["sl"].ToString()) + 1;
}
}
}
}
//break; //testing=================================
}
return dt;
}
public class CompareItem
{
public string ItemA { set; get; }
public string ItemB { set; get; }
public string Prompt { set; get; }
public CompareItem(string itemA, string itemB, string prompt)
{
this.ItemA = itemA;
this.ItemB = itemB;
this.Prompt = prompt;
}
public bool IsSame(DataRow dr)
{
Regex reg = new Regex(@"^\s*$");
object o1 = dr[ItemA]; object o2 = dr[ItemB];
//两个 null
if (null == o1 && null == o2)
return true;
//一个为null 另一个非null且不为空
else if (
(null == o1 && (null != o2 && !reg.IsMatch(o2.ToString())))
||
((null != o1 && !reg.IsMatch(o1.ToString())) && null == o2)
)
return false;
// 一个为null 另一个非null且为空??
//两个都不为null
else if (o1.ToString().Equals(o2.ToString()))
return true;
else
return false;
}
}