C#版本的CBO

由于需要用到CBO,就把VB版的做了一些修改
CBO.cs
using System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using System.Web.Caching;
using System.Xml;
using System.Xml.Serialization;

namespace Portal
{
    
public class CBO
    
{
        
"Private Shared Methods"

        
"Public Shared Methods"
    }

}

DataCache.cs
using System;
using System.Web;

namespace Portal
{
    
public class DataCache
    {
        
public static object GetCache(string CacheKey)
        {
            
// System.Web.Caching.Cache = HttpRuntime.Cache;
            
// System.Web.Caching.Cache objCache;
            return HttpRuntime.Cache[CacheKey];
        }

        
public static void SetCache(string CacheKey, object objObject)
        {
            
// System.Web.Caching.Cache = HttpRuntime.Cache;
            
// System.Web.Caching.Cache objCache;
            HttpRuntime.Cache.Insert(CacheKey, objObject);
        }
    }
}

Null.cs
using System;
using System.Data;
using System.Reflection;

namespace Portal
{
    
public class Null
    {
        
public static short NullShort
        {
            
get { return -1;}
        }

        
public static int NullInteger
        {
            
get {return -1;}
        }

        
public static byte NullByte
        {
            
get { return 255; }
        }

        
public static Single NullSingle
        {
            
get { return Single.MinValue; }
        }

        
public static double NullDouble
        {
            
get { return double.MinValue; }
        }

        
public static decimal NullDecimal
        {
            
get { return decimal.MinValue; }
        }

        
public static DateTime NullDate
        {
            
get { return DateTime.MinValue; }
        }
        
        
public static string NullString
        {
            
get { return ""; }
        }

        
public static bool NullBoolean
        {
            
get { return false; }
        }

        
public static Guid NullGuid
        {
            
get { return Guid.Empty; }
        }

        
// sets a field to an application encoded null value ( used in BLL layer )
        public static object SetNull(object objValue, object objField)
        {
            
object rtn = null
            
if (objValue == DBNull.Value)
            {
                
if (objField is Int16)
                    rtn 
= NullShort;
                
else if(objField is Byte)
                    rtn 
= NullByte;
                
else if(objField is Int32)
                    rtn 
= NullInteger;
                
else if(objField is Single)
                    rtn 
= NullSingle;
                
else if(objField is Double)
                    rtn 
= NullDouble;
                
else if(objField is Decimal)
                    rtn 
= NullDecimal;
                
else if(objField is DateTime)
                    rtn 
= NullDate;
                
else if(objField is string)
                    rtn 
= NullString;
                
else if(objField is Boolean)
                    rtn 
= NullBoolean;
                
else if(objField is Guid)
                    rtn 
= NullGuid;
                
else // complex object
                    rtn = null;
            }
            
else    
            {
                
// return value
                rtn = objValue;
            }
            
return rtn;
        }

        
// sets a field to an application encoded null value ( used in BLL layer )
        public static object SetNull(PropertyInfo objPropertyInfo)
        {
            
object rtn = null;
            
switch(objPropertyInfo.PropertyType.ToString())
            {
                
case "System.Int16" :
                    rtn 
= NullShort;
                    
break;
                
case "System.Int32" :
                
case "System.Int64" :
                    rtn 
= NullInteger;
                    
break;
                
case "system.Byte" :
                    rtn 
= NullByte;
                    
break;
                
case "System.Single" :
                    rtn 
= NullSingle;
                    
break;
                
case "System.Double" :
                    rtn 
= NullDouble;
                    
break;
                
case "System.Decimal" :
                    rtn 
= NullDecimal;
                    
break;
                
case "System.DateTime" :
                    rtn 
= NullDate;
                    
break;
                
case "System.String" :
                
case "System.Char" :
                    rtn 
= NullString;
                    
break;
                
case "System.Boolean" :
                    rtn 
= NullBoolean;
                    
break;
                
case "System.Guid" :
                    rtn 
= NullGuid;
                    
break;
                
default :
                    
// Enumerations default to the first entry
                    Type pType = objPropertyInfo.PropertyType;
                    
if(pType.BaseType.Equals(typeof(System.Enum)))
                    {
                        System.Array objEnumValues 
= System.Enum.GetValues(pType);
                        Array.Sort(objEnumValues);
                        rtn 
= System.Enum.ToObject(pType, objEnumValues.GetValue(0));
                    }
                    
else // complex object
                    {
                        rtn 
= null;
                    }
                    
break;
            }
            
return rtn;
        }

        
// convert an application encoded null value to a database null value ( used in DAL )
        public static object GetNull(object objField, object objDBNull)
        {
            
object rtn = objField;
            
if (objField == null)
            {
                rtn 
= objDBNull;
            }
            
else if (objField is Byte)
            {
                
if (Convert.ToByte(objField) == NullByte)
                    rtn 
= objDBNull;
            }
            
else if (objField is Int16)
            {
                
if (Convert.ToInt16(objField) == NullShort)
                    rtn 
= objDBNull;
            }
            
else if (objField is Int32)
            {
                
if (Convert.ToInt32(objField) == NullInteger)
                    rtn 
= objDBNull;
            }
            
else if (objField is Single)
            {
                
if (Convert.ToSingle(objField) == NullSingle)
                    rtn 
= objDBNull;
            }
            
else if (objField is Double)
            {
                
if (Convert.ToDouble(objField) == NullDouble)
                    rtn 
= objDBNull;
            }
            
else if (objField is Decimal)
            {
                
if (Convert.ToDecimal(objField) == NullDecimal)
                    rtn 
= objDBNull;
            }
            
else if (objField is DateTime)
            {
                
// compare the Date part of the DateTime with the DatePart of the NullDate ( this avoids subtle time differences )
                if (Convert.ToDateTime(objField).Date == NullDate.Date)
                    rtn 
= objDBNull;
            }
            
else if (objField is String)
            {
                
if (objField == null)
                    rtn 
= objDBNull;
                
else
                    
if (objField.ToString() == NullString)
                        rtn 
= objDBNull;
            }
            
else if (objField is Boolean)
            {
                
if (Convert.ToBoolean(objField) == NullBoolean)
                    rtn 
= objDBNull;
            }
            
else if (objField is Guid)
            {
                
if ((Guid)objField == NullGuid)
                    rtn 
= objDBNull;
            }
            
return rtn;
        }

        
// checks if a field contains an application encoded null value
        public static bool IsNull(object objField)
        {
            
bool rtn = false;
            
if (objField != null)
            {
                
if(objField is Int32)
                    rtn 
= objField.Equals(NullInteger);
                
else if (objField is Int16)
                    rtn 
= objField.Equals(NullShort);
                
else if (objField is Byte)
                    rtn 
= objField.Equals(NullByte);
                
else if (objField is Single)
                    rtn 
= objField.Equals(NullSingle);
                
else if (objField is Double)
                    rtn 
= objField.Equals(NullDouble);
                
else if (objField is Decimal)
                    rtn 
= objField.Equals(NullDecimal);
                
else if (objField is DateTime)
                {
                    DateTime objDate 
= (DateTime)objField;
                    rtn 
= objDate.Date.Equals(NullDate.Date);
                }
                
else if (objField is String)
                    rtn 
= objField.Equals(NullString);
                
else if (objField is Boolean)
                    rtn 
= objField.Equals(NullBoolean);
                
else if (objField is Guid)
                    rtn 
= objField.Equals(NullGuid);
                
else // complex object
                    rtn = false;
            }
            
else
                rtn 
= true;
            
return rtn;
        }
    }
}
posted @ 2008-05-20 17:44  angushine  阅读(790)  评论(2编辑  收藏  举报