TFS_ANTIGUO/TPAtesa_Davivienda/FE/DAVIVIENDA.SUGESE/DAVIVIENDA.SUGESE.Util/DBHelper.cs
2026-06-26 10:05:33 -06:00

320 lines
11 KiB
C#

using System;
using System.Data;
namespace DAVIVIENDA.SUGESE.Util
{
public class DBHelper
{
public static System.DateTime EMPTY_DATETIME; // DateTime.Parse("0001/01/01")
public static Object GetNullSafeString(System.String value)
{
return (value != null) ? ((object)value) : (DBNull.Value);
}
/// <summary>
/// Valida que las cadenas vacias se vayan como null
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static Object GetNullSafeEmptyString(System.String value)
{
return (value != null && !String.IsNullOrEmpty(value.Trim())) ? ((object)value) : (DBNull.Value);
}
public static Object GetNullSafeDateTime(System.DateTime value)
{
return (value != EMPTY_DATETIME) ? ((object)value) : (DBNull.Value);
}
public static Object GetNullSafePrimaryKey(System.Int32 value)
{
return (value > 0) ? ((object)value) : (DBNull.Value);
}
/// <summary>
/// Variante de 'GetNullSafeValue' es util para Primary Key de las entidades, asume que un valor 0 es equivalente a DbNull.Value.
/// Se comporta de la siguiente forma
/// si el parametro src_value es null devuelve DBNull.Value de igual forma
/// si el valor src_value#target_property es 0 devuelve DBNull.Value
/// en caso contrario devuelve el valor de la propiedad
/// </summary>
/// <param name="src_value"></param>
/// <param name="target_property"></param>
/// <returns>cuando no hay condiciones de error retorna System.Int32 o DbNull.Value</returns>
public static Object GetNullSafePrimaryKey(Object src_object, String property_name)
{
Object value;
if (src_object != null)
{
if ((value = GetPropertyValue(src_object, property_name)) is System.Int32)
{
Int32 valor_propiedad = (Int32)value;
return (valor_propiedad > 0) ? (value) : (DBNull.Value);
}
else
{
throw new Exception(src_object.GetType().FullName + "#" + property_name + " NO ES System.Int32");
}
}
return DBNull.Value;
}
/// <summary>
/// Variante de 'GetNullSafeValue' similar a GetNullSafePrimaryKey, excepto que un valor 0 o mayor son validos y valores negativos son considerados como DbNull.Value.
/// Se comporta de la siguiente forma
/// si el parametro src_value es null devuelve DBNull.Value de igual forma
/// si el valor src_value#target_property es negativo devuelve DBNull.Value
/// en caso contrario devuelve el valor de la propiedad
/// </summary>
/// <param name="src_value"></param>
/// <param name="target_property"></param>
/// <returns>cuando no hay condiciones de error retorna System.Int32 o DbNull.Value</returns>
public static Object GetNullSafeZeroBasePrimaryKey(Object src_object, String property_name)
{
Object value;
if (src_object != null)
{
if ((value = GetPropertyValue(src_object, property_name)) is System.Int32)
{
Int32 valor_propiedad = (Int32)value;
return (valor_propiedad >= 0) ? (value) : (DBNull.Value);
}
else
{
throw new Exception(src_object.GetType().FullName + "#" + property_name + " NO ES System.Int32");
}
}
return DBNull.Value;
}
private static Object GetPropertyValue(Object src_object, String property_name)
{
System.Reflection.PropertyInfo property = null;
if ((property = src_object.GetType().GetProperty(property_name)) != null)
{
return property.GetValue(src_object, new object[] { });
}
else
{
throw new Exception(src_object.GetType().FullName + "#" + property_name + " NO EXISTE!!!");
}
}
/// <summary>
/// Devuelve el valor de la propiedad src_object#target_property, DbNull.Value si src_object es null o la propiedad es null
/// </summary>
/// <param name="src_object"></param>
/// <param name="target_property"></param>
/// <returns></returns>
public static Object GetNullSafeValue(Object src_object, String property_name)
{
Object value;
if (src_object != null)
{
if ((value = GetPropertyValue(src_object, property_name)) != null)
{
return value;
}
}
return DBNull.Value;
}
public static Object SetNullSafeValue(Object dst_object, String dst_property, Object dst_value)
{
if (dst_value == null) return null;
if (dst_value != null && dst_value != DBNull.Value)
{
System.Reflection.PropertyInfo property;
if ((property = dst_object.GetType().GetProperty(dst_property)) != null)
{
Object casting_value = Convert.ChangeType(dst_value, property.PropertyType);
property.SetValue(dst_object, casting_value, new Object[] { });
}
else
{
throw new Exception(dst_object.GetType().FullName + "#" + dst_property + " NO TIENE ESA PROPIEDAD!!!");
}
}
return (Object)dst_object;
//return (dst_value != null && dst_value != DBNull.Value) ? (dst_object) : (null);
}
public static byte[] ReadNullSafeImage(object db_value)
{
if (db_value is byte[])
{
return (byte[])db_value;
}
return null;
}
public static System.Int32 ReadNullSafeInt(Object db_value)
{
return ReadNullSafeInt(db_value, 0);
}
public static System.Int32 ReadNullSafeInt(Object db_value, int default_value)
{
if (db_value is System.Int32)
{
return (System.Int32)db_value;
}
if (db_value is System.Int16)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Int32));
return (System.Int32)casting_value;
}
if (db_value is System.Int64)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Int32));
return (System.Int32)casting_value;
}
if (db_value is System.Decimal)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Int32));
return (System.Int32)casting_value;
}
if (db_value is System.String)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Int32));
return (System.Int32)casting_value;
}
if (db_value is SqlDbType.BigInt)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Int32));
return (System.Int32)casting_value;
}
return default_value;
}
public static System.DateTime ReadNullSafeDateTime(Object db_value)
{
return ReadNullSafeDateTime(db_value, EMPTY_DATETIME);
}
public static System.DateTime ReadNullSafeDateTime(Object db_value, DateTime default_value)
{
if (db_value is System.DateTime)
{
return (System.DateTime)db_value;
}
return default_value;
}
public static System.String ReadNullSafeString(Object db_value)
{
return ReadNullSafeString(db_value, null);
}
public static System.String ReadNullSafeString(Object db_value, String default_value)
{
if (db_value is System.String)
{
return (System.String)db_value;
}
if (db_value is System.Int16)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(String));
return (System.String)casting_value;
}
if (db_value is System.Int32)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(String));
return (System.String)casting_value;
}
if (db_value is System.Int64)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(String));
return (System.String)casting_value;
}
else if (db_value is System.Decimal)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(String));
return (System.String)casting_value;
}
return default_value;
}
public static System.Double ReadNullSafeDouble(Object db_value)
{
return ReadNullSafeDouble(db_value, 0);
}
public static System.Double ReadNullSafeDouble(Object db_value, System.Double default_value)
{
if (db_value is System.Double)
{
return (System.Double)db_value;
}
else if (db_value is System.Decimal)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Double));
return (System.Double)casting_value;
}
return default_value;
}
public static float ReadNullSafeFloat(Object db_value)
{
return ReadNullSafeFloat(db_value, 0);
}
public static float ReadNullSafeFloat(Object db_value, float default_value)
{
if (db_value is float)
{
return (float)db_value;
}
else if (db_value is System.Double)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(float));
return (float)casting_value;
}
else if (db_value is System.String)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(float));
return (float)casting_value;
}
return default_value;
}
public static System.Boolean ReadNullSafeBoolean(Object db_value)
{
return ReadNullSafeBoolean(db_value, false);
}
public static System.Boolean ReadNullSafeBoolean(Object db_value, System.Boolean default_value)
{
if (db_value is System.Boolean)
{
return (System.Boolean)db_value;
}
else if (db_value is System.Decimal)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Boolean));
return (System.Boolean)casting_value;
}
else if (db_value is short)
{
System.Object casting_value = Convert.ChangeType(db_value, typeof(Boolean));
return (System.Boolean)casting_value;
}
return default_value;
}
}
}