通过逻辑类和数据库表比对 - 校验数据表
2017-06-09 15:53:24 访问(1626) 赞(0) 踩(0)
-
-
using eKing.SzdfPage.Classes.CheckDBs;
using SlowX.Core.Business;
using SlowX.Core.Classes;
using SlowX.Core.TableAttribute;
using SlowX.DAL.Helpers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Text;
namespace eKing.SzdfPage.Helpers
{
/// <summary>
///
/// </summary>
public partial class eKingSzdfPageHelper
{
/// <summary>
/// 通过逻辑类和数据库表比对 - 校验数据表
/// </summary>
/// <param name="strTableName"></param>
/// <returns></returns>
public string CheckDBTableToHTML
(
string strTableName,
DBHelper xdbHelper
)
{
List<DbTableCheckResult> theList
=
CheckDBTable(strTableName, xdbHelper);
StringBuilder theResult = new StringBuilder();
theResult.AppendLine("<table border=\"1\">");
theResult.AppendLine("<tbody>");
theResult.AppendLine("<tr><td>表名</td><td>注释</td><td>多出来的字段</td><td>缺失字段</td><td>异常</td></tr>");
foreach (DbTableCheckResult item in theList)
{
if (item.IsOK)
continue;
theResult.AppendLine(item.ToTrHtml());
}
theResult.AppendLine("</tbody>");
theResult.AppendLine("</table>");
return theResult.ToString();
}
/// <summary>
/// 通过逻辑类和数据库表比对 - 校验数据表
/// </summary>
/// <param name="strTableName"></param>
/// <returns></returns>
public List<DbTableCheckResult> CheckDBTable
(
string strTableName,
DBHelper xdbHelper
)
{
List<DbTableCheckResult> theResult
=
new List<DbTableCheckResult>();
bool bIsCreate = true;
if (xdbHelper == null)
{
xdbHelper
=
SlowX.DAL.Helpers.DBHelper.CreateDBHelper();
}
else
{
// 没有打开链接 //
bIsCreate = xdbHelper.IsNotOpen();
}
try
{
if (bIsCreate)
xdbHelper.OpenDBHelper();
bool isAll = true;
if (strTableName != null)
{
strTableName = strTableName.Trim();
if (strTableName.Length != 0)
{
strTableName = strTableName.ToUpper();
isAll = false;
}
}
List<Type> typeList
=
BaseBusinessTypeList();
DbTableCheckResult cR = null;
if (isAll)
{
foreach (Type tB in typeList)
{
cR = CheckDBTable8BaseBusinessType(tB, xdbHelper);
if (cR == null)
continue;
theResult.Add(cR);
}
}
else
{
foreach (Type tB in typeList)
{
if (!tB.Name.ToUpper().Contains(strTableName))
continue;
cR = CheckDBTable8BaseBusinessType(tB, xdbHelper);
if (cR == null)
continue;
theResult.Add(cR);
}
}
if (bIsCreate)
xdbHelper.EndDBHelper();
}
catch (Exception err)
{
if (bIsCreate)
xdbHelper.TranDBHelper();
throw err;
}
finally
{
if (bIsCreate)
xdbHelper.FinallyDBHelper();
}
return theResult;
}
/// <summary>
///
/// </summary>
/// <param name="tB"></param>
/// <returns></returns>
protected DbTableCheckResult CheckDBTable8BaseBusinessType
(Type tB, DBHelper xdbHelper)
{
if (tB == null)
return null;
DbTableCheckResult theResult = new DbTableCheckResult();
theResult.TableName = tB.Name;
theResult.TableComment = "";
try
{
BaseBusiness bll = BaseBusinessGetByType(tB);
BaseTableAttribute BTA = bll.BaseTableAttributeGet();
theResult.TableName = BTA.TableName;
theResult.TableComment = BTA.TableComment;
string sql = "select * from " + BTA.TableName + " where 1=2";
DataSet ds = xdbHelper.ExecuteDataSet(sql);
theResult = DbTableCheckResultByDataSet(BTA, ds);
}
catch (Exception err)
{
theResult.ErrMsg = err.Message;
}
return theResult;
}
/// <summary>
///
/// </summary>
/// <param name="tB"></param>
/// <returns></returns>
protected DbTableCheckResult DbTableCheckResultByDataSet
(
BaseTableAttribute BTA,
DataSet ds
)
{
if (ds == null)
return null;
DataTable dt = ds.Tables[0];
DbTableCheckResult theResult = new DbTableCheckResult();
List<DataColumnAttributeInfo> dcList
=
BTA.listDataColumnAttributeInfoValue;
bool isOK = true;
bool isNotFind = true;
bool isFirst = true;
foreach(DataColumn dc in dt.Columns)
{
isNotFind = true;
foreach (DataColumnAttributeInfo dcInfo in dcList)
{
if(dc.ColumnName.Trim().ToLower() == dcInfo.Name.Trim().ToLower())
{
isNotFind = false;
break;
}
}
if(isNotFind)
{
isOK = false;
if (isFirst)
isFirst = false;
else
theResult.MoreDataColumn += "|";
theResult.MoreDataColumn += dc.ColumnName;
}
}
isFirst = true;
foreach (DataColumnAttributeInfo dcInfo in dcList)
{
isNotFind = true;
foreach (DataColumn dc in dt.Columns)
{
if (dc.ColumnName.Trim().ToLower() == dcInfo.Name.Trim().ToLower())
{
isNotFind = false;
break;
}
}
if (isNotFind)
{
isOK = false;
if (isFirst)
isFirst = false;
else
theResult.MissDataColumn += "|";
theResult.MissDataColumn += dcInfo.Name + "|";
}
}
theResult.IsOK = isOK;
theResult.TableComment = BTA.TableComment;
theResult.TableName = BTA.TableName;
return theResult;
}
}
}
-
using System;
namespace eKing.SzdfPage.Classes.CheckDBs
{
/// <summary>
/// 数据库表格校验结果
/// </summary>
[Serializable]
public class DbTableCheckResult
{
/// <summary>
/// 数据库表格校验结果
/// </summary>
public DbTableCheckResult()
{
}
#region IsOK ~ 是否正确
/// <summary>
/// IsOK ~ 是否正确
/// </summary>
protected bool m_IsOK = false;
/// <summary>
/// IsOK ~ 是否正确
/// </summary>
public bool IsOK
{
get
{
return m_IsOK;
}
set
{
m_IsOK = value;
}
}
#endregion IsOK ~ 是否正确
#region TableName ~ 数据表
/// <summary>
/// TableName ~ 数据表
/// </summary>
protected string m_TableName = null;
/// <summary>
/// TableName ~ 数据表
/// </summary>
public string TableName
{
get
{
return m_TableName;
}
set
{
m_TableName = value;
}
}
#endregion TableName ~ 数据表
#region TableComment ~ 表注释
/// <summary>
/// TableComment ~ 表注释
/// </summary>
protected string m_TableComment = null;
/// <summary>
/// TableComment ~ 表注释
/// </summary>
public string TableComment
{
get
{
return m_TableComment;
}
set
{
m_TableComment = value;
}
}
#endregion TableComment ~ 表注释
#region MoreDataColumn ~ 多出来的字段
/// <summary>
/// MoreDataColumn ~ 多出来的字段
/// </summary>
protected string m_MoreDataColumn = null;
/// <summary>
/// MoreDataColumn ~ 多出来的字段
/// </summary>
public string MoreDataColumn
{
get
{
return m_MoreDataColumn;
}
set
{
m_MoreDataColumn = value;
}
}
#endregion MoreDataColumn ~ 多出来的字段
#region MissDataColumn ~ 缺失的字段
/// <summary>
/// MissDataColumn ~ 缺失的字段
/// </summary>
protected string m_MissDataColumn = null;
/// <summary>
/// MissDataColumn ~ 缺失的字段
/// </summary>
public string MissDataColumn
{
get
{
return m_MissDataColumn;
}
set
{
m_MissDataColumn = value;
}
}
#endregion MissDataColumn ~ 缺失的字段
#region NoEqualDataColumn ~ 不对等的字段
/// <summary>
/// NoEqualDataColumn ~ 不对等的字段
/// </summary>
protected string m_NoEqualDataColumn = null;
/// <summary>
/// NoEqualDataColumn ~ 不对等的字段
/// </summary>
public string NoEqualDataColumn
{
get
{
return m_NoEqualDataColumn;
}
set
{
m_NoEqualDataColumn = value;
}
}
#endregion NoEqualDataColumn ~ 不对等的字段
#region ErrMsg ~ 错误消息
/// <summary>
/// ErrMsg ~ 错误消息
/// </summary>
protected string m_ErrMsg = null;
/// <summary>
/// ErrMsg ~ 错误消息
/// </summary>
public string ErrMsg
{
get
{
return m_ErrMsg;
}
set
{
m_ErrMsg = value;
}
}
#endregion ErrMsg ~ 错误消息
/// <summary>
/// HTML输出
/// </summary>
/// <returns></returns>
public string ToTrHtml()
{
return "<tr><td>" + TableName + "</td><td>" + TableComment + "</td><td>" + MoreDataColumn + "</td><td>" + MissDataColumn + "</td><td>" + ErrMsg + "</td></tr>";
}
}
}
上一条:
下一条:
相关评论
发表评论