/// <summary>
///(比较 二个对象的每个值是否相等) 获取实体类里面所有的名称、值、DESCRIPTION值
/// </summary>
/// <typeparam name="T">比较的对象</typeparam>
/// <param name="t1">原对象</param>
/// <param name="t2">现对象</param>
/// <returns></returns>
public static string CompareObjectValue<T>(T t1, T t2)
{
string tStr = string.Empty;
try
{
if (t1 == null || t2 == null)
{
return tStr;
}
System.Reflection.PropertyInfo[] properties = t1.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public);
if (properties.Length <= 0)
{
return tStr;
}
foreach (System.Reflection.PropertyInfo item in properties)
{
string name = item.Name; //名称
object value = item.GetValue(t1, null); //值
object value2 = item.GetValue(t2, null); //值 2
if (value == null)
value = DBNull.Value;
else if (item.PropertyType.Name == "DateTime" && Convert.ToDateTime(value) == DateTime.MinValue)
value = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出
if (value2 == null)
value2 = DBNull.Value;
else if (item.PropertyType.Name == "DateTime" && Convert.ToDateTime(value2) == DateTime.MinValue)
value2 = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出
if (value.ToString()!=value2.ToString())
{
string des = ((DataFieldAttribute)Attribute.GetCustomAttribute(item, typeof(DataFieldAttribute))).DescName;// 属性值
if (!string.IsNullOrEmpty(des))
{
tStr += "[" + des + "]:" + value + "修改为" + value2 + "| ";
}
}
}
}
catch (Exception ex)
{
ErrorLog.Write("CompareObjectValue", "比较对象的值出错", ex);
}
return tStr;
}
/// <summary>
/// 根据对象的属性名称,获取属性的值(用于根据对象自动完成参数化sql语句的赋值操作)
/// </summary>
/// <param name="propertyName">属性名称(忽略大小写)</param>
/// <param name="objectInstance">对象实例</param>
/// <param name="objectType">对象实例类型</param>
/// <returns>属性的值</returns>
public static object GetPropertyValue(string propertyName, object objectInstance, Type objectType)
{
PropertyInfo pi = objectType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
if (pi == null)
throw new ArgumentException("自动设置参数值失败。参数化变量名称" + propertyName + "必须和对象中的属性名称一样。");
if (!pi.CanRead)
throw new ArgumentException("自动设置参数值失败。对象的" + propertyName + "属性没有get方式,无法读取值。");
object value = pi.GetValue(objectInstance, null);
if (value == null)
value = DBNull.Value;
else if (pi.PropertyType.Name == "DateTime" && Convert.ToDateTime(value) == DateTime.MinValue)
value = DBNull.Value;//防止数据库是smalldatetime类型时DateTime.MinValue溢出
return value;
}