千里独行

国虽大,黩武必亡;天下虽安,忘战必危★★ 准备并期待着中日决战||本站文章可以全部转载

博客园 首页 新随笔 联系 订阅 管理
using System;
namespace YYFDBCommon
{
 
 /// <summary>
 /// 字符串类型的字段数据对象
 /// </summary>
 public class DBStringField : DBFieldBase
 {
  private string strValue = null ;
  /// <summary>
  /// 字符串值
  /// </summary>
  public string StringValue
  {
   get{ return strValue;}
   set{ strValue = value; this.SetModified();}
  }
  public override object Value
  {
   get{ return strValue ; }
   set{ strValue = Convert.ToString( value );  this.SetModified();}
  }
  public override string DisplayValue
  {
   get{ return strValue ;}
   set{ strValue = value; this.SetModified();}
  }
  public override object DBValue
  {
   get{ return strValue ;}
   set{ strValue = (string )value; this.SetModified();}
  }
  public override bool NullValue
  {
   get{ return strValue == null;}
   set{ if( value ) { strValue = null; this.SetModified();} }
  }
  public static System.Text.Encoding DataEncoding = System.Text.Encoding.UTF8 ;
  public override int ByteCount
  {
   get
   {
    if( strValue == null || strValue.Length == 0 )
     return -1;
    else
     return DataEncoding.GetByteCount( strValue );
   }
  }
  public override bool ReadBytes(byte[] bytData)
  {
   if( bytData != null)
   {
    strValue = DataEncoding.GetString( bytData );
    return true;
   }
   else
   {
    strValue = null;
    return false;
   }
  }
  public override byte[] GetBytes()
  {
   if( strValue == null || strValue.Length == 0 )
    return null;
   else
    return DataEncoding.GetBytes( strValue );
  }
 }//public class DBStringField : DBFieldBase
 /// <summary>
 /// 整数类型的字段数据对象
 /// </summary>
 public class DBIntegerField : DBFieldBase
 {
  private int intValue = int.MinValue ;
  public int IntegerValue
  {
   get{ return intValue ;}
   set{ intValue = value;  this.SetModified();}
  }
  public override object Value
  {
   get{ return intValue ;}
   set{ intValue = (int)value; this.SetModified();}
  }
  public override object DBValue
  {
   get{ return intValue.ToString();}
   set{ intValue = Convert.ToInt32( value ); this.SetModified();}
  }
  public override string DisplayValue
  {
   get{ return intValue.ToString();}
   set{ intValue = Convert.ToInt32( value ) ; this.SetModified();}
  }
  public override bool NullValue
  {
   get{ return intValue == int.MinValue ;}
   set{ if( value) { intValue = int.MinValue ;  this.SetModified(); }}
  }
  public override int ByteCount
  {
   get{ return 4; }
  }
  public override byte[] GetBytes()
  {
   return System.BitConverter.GetBytes( intValue );
  }
  public override bool ReadBytes(byte[] bytData)
  {
   intValue = System.BitConverter.ToInt32( bytData ,0 );
   return true;
  }
 }//public class DBIntegerField : DBFieldBase
 
 /// <summary>
 /// 货币类型的字段数据对象
 /// </summary>
 public class DBDecimalField : DBFieldBase
 {
  private decimal decValue = decimal.MinValue ;
  public decimal DecimalValue
  {
   get{ return decValue;}
   set{ decValue = value; this.SetModified();}
  }
  public override object Value
  {
   get{ return decValue ;}
   set{ decValue = (decimal)value; this.SetModified();}
  }
  public override object DBValue
  {
   get{ return decValue.ToString();}
   set{ decValue = Convert.ToDecimal( value ); this.SetModified();}
  }
  public override string DisplayValue
  {
   get{ return decValue.ToString();}
   set{ decValue = Convert.ToDecimal( value ) ; this.SetModified();}
  }
  public override bool NullValue
  {
   get{ return decValue == decimal.MinValue ;}
   set{ if( value ) { decValue = decimal.MinValue ; this.SetModified();}}
  }
  public override int ByteCount
  {
   get{ return 8 ;}
  }
  public override byte[] GetBytes()
  {
   return System.BitConverter.GetBytes( ( double) decValue);
  }
  public override bool ReadBytes(byte[] bytData)
  {
   decValue = ( decimal) System.BitConverter.ToDouble( bytData , 0 );
   return true;
  }
 }//public class DBIntegerField : DBFieldBase
 /// <summary>
 /// 浮点数类型的字段数据对象
 /// </summary>
 public class DBDoubleField : DBFieldBase
 {
  private double dblValue = double.NaN ;
  public double DoubleValue
  {
   get{ return dblValue;}
   set{ dblValue = value;  this.SetModified();}
  }
  public override object Value
  {
   get{ return dblValue ;}
   set{ dblValue = ( double) value;  this.SetModified();}
  }
  public override object DBValue
  {
   get{ return dblValue.ToString();}
   set{ dblValue = Convert.ToDouble( value ); this.SetModified();}
  }
  public override string DisplayValue
  {
   get{ return dblValue.ToString();}
   set{ dblValue = Convert.ToDouble( value ) ; this.SetModified();}
  }
  public override bool NullValue
  {
   get{ return double.IsNaN( dblValue );}
   set{ if( value ) { dblValue = double.NaN ;  this.SetModified(); }}
  }
  public override int ByteCount
  {
   get{ return 8 ;}
  }
  public override byte[] GetBytes()
  {
   return System.BitConverter.GetBytes( dblValue);
  }
  public override bool ReadBytes(byte[] bytData)
  {
   dblValue = System.BitConverter.ToDouble( bytData , 0 );
   return true;
  }
 }//public class DBIntegerField : DBFieldBase
 /// <summary>
 /// 时间类型的字段基础类
 /// </summary>
 public abstract class DBDateTimeFieldBase : DBFieldBase
 {
  protected System.DateTime dtmValue = System.DateTime.MinValue ;
  public System.DateTime DateTimeValue
  {
   get{ return dtmValue ;}
   set{ dtmValue = value;  this.SetModified();}
  }
  public override object Value
  {
   get{ return dtmValue ;}
   set{ dtmValue = ( System.DateTime) value;  this.SetModified();}
  }
  public override bool NullValue
  {
   get{ return dtmValue == System.DateTime.MinValue ;}
   set{ if( value ) { dtmValue = System.DateTime.MinValue ;  this.SetModified(); }}
  }
  public override int ByteCount
  {
   get{ return 8;}
  }
  public override byte[] GetBytes()
  {
   return System.BitConverter.GetBytes( dtmValue.Ticks );
  }
  public override bool ReadBytes(byte[] bytData)
  {
   dtmValue = new DateTime( System.BitConverter.ToInt64( bytData , 0 ));
   return true;
  }
 }
 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度19的字符串,样式为 yyyy-MM-dd HH:mm:ss 
 /// </summary>
 public class DB19DateField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd HH:mm:ss");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 19)
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 5 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 8 , 2 ));
     int iHour = Convert.ToInt32( vValue.Substring( 11 , 2 ));
     int iMinute = Convert.ToInt32( vValue.Substring( 14 , 2));
     int iSecend = Convert.ToInt32( vValue.Substring( 17 , 2));
     dtmValue = new System.DateTime( iYear , iMonth , iDay , iHour , iMinute , iSecend );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd HH:mm:ss");}
   set{ dtmValue = Convert.ToDateTime( value ); this.SetModified();}
  }
  
 }//public class DB19DateField : DBFieldBase
 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度10的字符串,样式为 yyyy-MM-dd
 /// </summary>
 public class DB10DateField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 10 )
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 5 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 8 , 2 ));
     dtmValue = new System.DateTime( iYear , iMonth , iDay );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd");}
   set{ dtmValue = Convert.ToDateTime( value ); this.SetModified();}
  }
 }//public class DB10DateField : DBFieldBase
 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度14的字符串,样式为yyyyMMddHHmmss
 /// </summary>
 public class DB14DBDateField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("yyyyMMddHHmmss");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 14 )
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 4 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 6 , 2 ));
     int iHour = Convert.ToInt32( vValue.Substring( 8 , 2 ));
     int iMinute = Convert.ToInt32( vValue.Substring( 10 , 2));
     int iSecend = Convert.ToInt32( vValue.Substring( 12 , 2));
     dtmValue = new System.DateTime( iYear , iMonth , iDay , iHour , iMinute , iSecend );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd HH:mm:ss");}
   set{ dtmValue = Convert.ToDateTime( value ); this.SetModified();}
  }
 }//public class DB14DBDateField : DBFieldBase
 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度12的字符串,样式为yyyyMMddHHmm
 /// </summary>
 public class DB12DBDateField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("yyyyMMddHHmm");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 12 )
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 4 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 6 , 2 ));
     int iHour = Convert.ToInt32( vValue.Substring( 8 , 2 ));
     int iMinute = Convert.ToInt32( vValue.Substring( 10 , 2));
     dtmValue = new System.DateTime( iYear , iMonth , iDay , iHour , iMinute , 0 );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd HH:mm");}
   set{ dtmValue = Convert.ToDateTime( value ); this.SetModified();}
  }
 }//public class DB12DBDateField : DBFieldBase

 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度8的字符串,样式为yyyyMMdd
 /// </summary>
 public class DB8DBDateField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("yyyyMMdd");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 8 )
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 4 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 6 , 2 ));
     dtmValue = new System.DateTime( iYear , iMonth , iDay );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("yyyy-MM-dd");}
   set{ dtmValue = Convert.ToDateTime( value ); this.SetModified();}
  }
  /// <summary>
  /// 当前时间距离本记录表示的时间的年数,若该时间保存一个人的出生日期,则本函数返回年龄
  /// </summary>
  /// <returns></returns>
  public int Age()
  {
   return System.DateTime.Now.Year - dtmValue.Year ;
  }
 }//public class DB8DBDateField : DBFieldBase
 /// <summary>
 /// 表示时间类型的字段对象,该字段保存在数据库中为长度6的字符串,样式为HHmmss
 /// </summary>
 public class DB6DBTimeField : DBDateTimeFieldBase
 {
  public override object DBValue
  {
   get{ return dtmValue.ToString("HHmmss");}
   set
   {
    string vValue = ( string ) value;
    if( vValue.Length == 6 )
    {
     int iYear = Convert.ToInt32( vValue.Substring( 0 , 4 ));
     int iMonth = Convert.ToInt32( vValue.Substring( 4 , 2 ));
     int iDay = Convert.ToInt32( vValue.Substring( 6 , 2 ));
     dtmValue = new System.DateTime( iYear , iMonth , iDay );
    }
    else
     dtmValue = System.DateTime.MinValue ;
    this.SetModified();
   }
  }
  public override string DisplayValue
  {
   get{ return dtmValue.ToString("HH:mm:ss");}
   set{ dtmValue = Convert.ToDateTime( value );  this.SetModified();}
  }
 }//public class DB6DBTimeField : DBFieldBase
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 /// <summary>
 /// 数据库字段数据对象
 /// </summary>
 public abstract class DBFieldBase
 {
  public DBRecordBase OwnerRecord = null;
  public bool Modified = false;
  /// <summary>
  /// 本字段是否是关键字段
  /// </summary>
  public virtual bool KeyField
  {
   get{ return false;}
  }
  /// <summary>
  /// 是否是空数据
  /// </summary>
  public virtual bool NullValue
  {
   get{return false ;}
   set{;}
  }
  /// <summary>
  /// 对象数值
  /// </summary>
  public abstract object Value
  {
   get;
   set;
  }
  /// <summary>
  /// 对象保存在数据库中的数值
  /// </summary>
  public virtual object DBValue
  {
   get{ return this.Value ;}
   set{ this.Value = value;  this.SetModified();}
  }
  /// <summary>
  /// 对象显示在用户界面上的数值
  /// </summary>
  public virtual string DisplayValue
  {
   get{return Convert.ToString( this.Value ) ;}
   set{;}
  }
  /// <summary>
  /// 测试数值是否正确
  /// </summary>
  /// <returns></returns>
  public virtual bool CheckValue()
  {
   return true;
  }
  /// <summary>
  /// 字段名称
  /// </summary>
  public virtual string FieldName
  {
   get{ return null;}
  }
  protected void SetModified()
  {
   if( this.OwnerRecord != null)
    this.OwnerRecord.SetModified();
  }
  /// <summary>
  /// 更新字段数据到数据库中
  /// </summary>
  /// <returns></returns>
  public virtual bool UpdateToDB()
  {
   if( OwnerRecord != null )
   {
    return OwnerRecord.UpdateField( this );
   }
   else
    return false;
  }
  /// <summary>
  /// 将对象数据转换为字节数据时的字节数据长度,若小于0则表示无法转换为字节数据
  /// </summary>
  public virtual int ByteCount
  {
   get{ return -1 ;}
  }
  /// <summary>
  /// 获得保存对象数据的字节数据
  /// </summary>
  /// <returns>操作是否成功</returns>
  public virtual byte[] GetBytes()
  {
   return null;
  }
  /// <summary>
  /// 从字节数据加载对象数据
  /// </summary>
  /// <param name="bytData">字节数组</param>
  /// <returns>操作是否成功</returns>
  public virtual bool ReadBytes( byte[] bytData )
  {
   return false;
  }
 }//public abstract class DBFieldBase
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 /// <summary>
 /// 数据库单条记录的对象
 /// </summary>
 public abstract class DBRecordBase
 {
  /// <summary>
  /// 数据表的额外的前缀
  /// </summary>
  public static string TableNamePrefix = null;
  /// <summary>
  /// 数据记录状态
  /// </summary>
  public System.Data.DataRowState DataState = System.Data.DataRowState.Unchanged ;
  public void SetModified()
  {
   if( DataState == System.Data.DataRowState.Unchanged )
    DataState = System.Data.DataRowState.Modified ;
  }
  /// <summary>
  /// 字段对象集合
  /// </summary>
  protected DBFieldBase[] myFields = null;
  /// <summary>
  /// 数据库连接对象
  /// </summary>
  protected System.Data.IDbConnection myOwnerConnection = null;
  /// <summary>
  /// 字段对象集合
  /// </summary>
  public DBFieldBase[] Fields
  {
   get{ return myFields;}
  }
  /// <summary>
  /// 数据库连接对象
  /// </summary>
  public System.Data.IDbConnection OwnerConnection
  {
   get{ return myOwnerConnection;}
   set{ myOwnerConnection = value;}
  }
  /// <summary>
  /// 本对象操作的表名
  /// </summary>
  public virtual string TableName
  {
   get{ return null ; }
  }
  public virtual string RunTimeTableName
  {
   get
   {
    if( TableNamePrefix != null )
     return TableNamePrefix + "." + this.TableName ;
    else
     return this.TableName ;
   }
  }
  /// <summary>
  /// 字段个数
  /// </summary>
  public int FieldCount
  {
   get{ return myFields.Length ;}
  }
  /// <summary>
  /// 关键字段
  /// </summary>
  public DBFieldBase KeyField
  {
   get
   {
    foreach( DBFieldBase f in myFields)
     if( f.KeyField )
      return f;
    return null;
   }
  }
  /// <summary>
  /// 测试所有的字段数据是否正确
  /// </summary>
  /// <returns></returns>
  public bool CheckFieldValue()
  {
   foreach( DBFieldBase f in myFields)
    if( !f.CheckValue())
     return false;
   return true;
  }
  /// <summary>
  /// 从数据读取器读取数据
  /// </summary>
  /// <param name="myReader">数据读取器</param>
  /// <returns>操作是否成功</returns>
  public virtual bool FromReader( System.Data.IDataReader myReader )
  {
   if( myReader != null)
   {
    if( myReader.FieldCount == myFields.Length )
    {
     for(int iCount = 0 ; iCount < myFields.Length ; iCount ++ )
     {
      if( myReader.IsDBNull( iCount ))
       myFields[iCount].NullValue = true;
      else
       myFields[iCount].DBValue = myReader.GetValue( iCount );
     }
     this.DataState = System.Data.DataRowState.Unchanged ;
     return true;
    }
   }
   return false;
  }//public virtual bool FromReader( System.Data.IDataReader myReader )
  /// <summary>
  /// 保存数据库记录数据到XML文档
  /// </summary>
  /// <param name="myWriter">XML书写器</param>
  /// <returns>操作是否成功</returns>
  public virtual bool ToXML( System.Xml.XmlWriter myWriter )
  {
   foreach( DBFieldBase f in myFields)
   {
    if( System.Xml.XmlReader.IsName( f.FieldName ))
    {
     if( f.NullValue )
      myWriter.WriteElementString( f.FieldName , "");
     else
      myWriter.WriteElementString( f.FieldName , f.DisplayValue );
    }
   }
   return true;
  }// public virtual bool ToXML( System.Xml.XmlWriter myWriter )
  /// <summary>
  /// 为指定的命令对象添加参数
  /// </summary>
  /// <param name="myCmd">命令对象</param>
  /// <param name="objValue">参数值</param>
  /// <returns>添加的参数对象</returns>
  protected System.Data.IDbDataParameter AddParameter(System.Data.IDbCommand myCmd , object objValue)
  {
   if( myCmd != null)
   {
    System.Data.IDbDataParameter myParam = myCmd.CreateParameter();
    if( myParam != null)
    {
     myParam.Value = objValue ;
     myCmd.Parameters.Add( myParam );
     return myParam;
    }
   }
   return null;
  }
  /// <summary>
  /// 设置插入记录到数据库中的SQL命令对象
  /// </summary>
  /// <param name="myCmd">SQL命令对象</param>
  /// <param name="Flag">状态控制</param>
  /// <returns>操作是否成功</returns>
  protected virtual bool SetInsertCommand( System.Data.IDbCommand myCmd , int Flag )
  {
   if( Flag == 0 && this.FieldCount > 0 && this.TableName != null )
   {
    if( !this.CheckFieldValue() )
     return false;
    System.Collections.ArrayList myFS = new System.Collections.ArrayList();
    foreach( DBFieldBase f in myFields)
     if( ! f.NullValue )
      myFS.Add( f );
    System.Text.StringBuilder myStr = new System.Text.StringBuilder();
    myStr.Append("Insert Into ");
    myStr.Append( this.RunTimeTableName ) ;
    myStr.Append(" ( ");
    for(int iCount = 0 ; iCount < myFS.Count  ; iCount ++ )
    {
     if( iCount != 0 )
      myStr.Append(",");
     myStr.Append( ( ( DBFieldBase ) myFS[iCount]).FieldName );
    }
    myStr.Append(" ) Values ( ");
    for(int iCount = 0 ; iCount < myFS.Count ; iCount ++ )
    {
     if( iCount != 0 )
      myStr.Append(" , " );
     myStr.Append(" ? ");
    }
    myStr.Append(" ) ");
    myCmd.CommandText = myStr.ToString() ;
    myCmd.Parameters.Clear();
    foreach( DBFieldBase f in myFS )
     this.AddParameter( myCmd ,  f.DBValue );
   }
   return false;
  }
  /// <summary>
  /// 设置更新数据库使用的SQL命令对象
  /// </summary>
  /// <param name="myCmd">SQL命令对象</param>
  /// <param name="Flag">状态控制</param>
  /// <returns>操作是否成功</returns>
  protected virtual bool SetUpdateCommand( System.Data.IDbCommand myCmd , int Flag )
  {
   if( Flag == 0 && this.KeyField != null )
   {
    if( ! this.CheckFieldValue())
     return false;
    System.Text.StringBuilder myStr = new System.Text.StringBuilder();
    myStr.Append("Update " + this.RunTimeTableName + " Set ");
    for(int iCount = 0 ; iCount < myFields.Length  ; iCount ++ )
    {
     if( iCount != 0 )
      myStr.Append(" , ");
     myStr.Append( myFields[iCount].FieldName );
     myStr.Append(" = ? ");
    }
    myStr.Append(" Where " + this.KeyField.FieldName  + " = ?");
    myCmd.Parameters.Clear();
    foreach( DBFieldBase f in myFields)
     this.AddParameter( myCmd , f.DBValue );
    this.AddParameter( myCmd , this.KeyField.DBValue );
    return true;
   }
   return false;
  }
  /// <summary>
  /// 设置删除记录使用的SQL命令对象
  /// </summary>
  /// <param name="myCmd">SQL命令对象</param>
  /// <param name="Flag">状态控制</param>
  /// <returns>操作是否成功</returns>
  protected virtual bool SetDeleteCommand( System.Data.IDbCommand myCmd , int Flag )
  {
   if( Flag == 0 &&  this.KeyField != null )
   {
    myCmd.CommandText = "Delete From " + this.RunTimeTableName + " Where " + this.KeyField.FieldName  + " = ?";
    myCmd.Parameters.Clear();
    this.AddParameter( myCmd , this.KeyField.DBValue );
    return true;
   }
   return false;
  }
  /// <summary>
  /// 获得查询所有字段的SQL语句
  /// </summary>
  /// <returns></returns>
  public virtual string GetSelectSQL()
  {
   System.Text.StringBuilder myStr = new System.Text.StringBuilder();
   myStr.Append("Select ");
   for(int iCount = 0 ; iCount < myFields.Length  ; iCount ++ )
   {
    if( iCount != 0 )
     myStr.Append(",");
    myStr.Append( myFields[iCount].FieldName );
   }
   myStr.Append(" From " + this.RunTimeTableName );
   return myStr.ToString();
  }
  /// <summary>
  /// 设置查询数据库使用的命令对象,一般的当参数为0时则表示要查询指定关键字的单条记录,参数为1则要查询所有的记录
  /// </summary>
  /// <param name="myCmd">SQL命令对象</param>
  /// <param name="Flag">状态控制</param>
  /// <returns>操作是否成功</returns>
  public virtual bool SetSelectCommand( System.Data.IDbCommand myCmd , int Flag )
  {
   if( Flag == 1 || ( Flag == 0 && this.KeyField != null ))
   {
    myCmd.Parameters.Clear();
    System.Text.StringBuilder myStr = new System.Text.StringBuilder();
    myStr.Append("Select ");
    for(int iCount = 0 ; iCount < myFields.Length ; iCount ++ )
    {
     if( iCount != 0 )
      myStr.Append(",");
     myStr.Append( myFields[iCount].FieldName );
    }
    myStr.Append(" From " + this.RunTimeTableName );
    if( Flag == 0 )
    {
     myStr.Append(" Where " + this.KeyField.FieldName  + " = ?");
     this.AddParameter( myCmd , this.KeyField.DBValue );
    }
    myCmd.CommandText = myStr.ToString();
    return true;
   }
   return false;
  }
  /// <summary>
  /// 创建一个数据库记录对象的实例
  /// </summary>
  /// <returns></returns>
  public virtual DBRecordBase NewInstance()
  {
   return null;
  }
  /// <summary>
  /// 从数据库读取关键字为指定数据的记录对象
  /// </summary>
  /// <returns></returns>
  public virtual bool ReadFromDB()
  {
   if( myOwnerConnection != null)
   {
    using(System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
    {
     if( SetSelectCommand( myCmd , 0 ))
     {
      System.Data.IDataReader myReader = myCmd.ExecuteReader();
      if( myReader.Read() && FromReader( myReader ) )
      {
       myReader.Close();
       return true ;
      }
      myReader.Close();
     }
    }//using
   }
   return false;
  }
  /// <summary>
  /// 保存当前记录到数据库
  /// </summary>
  /// <returns></returns>
  public virtual bool SaveToDB()
  {
   if( this.DataState == System.Data.DataRowState.Modified )
    return UpdateToDB( 0 );
   else
    return InsertToDB( 0 );
  }
  /// <summary>
  /// 向数据库插入本记录
  /// </summary>
  /// <param name="Flag">附加的参数</param>
  /// <returns>操作是否成功</returns>
  public virtual bool InsertToDB( int Flag )
  {
   using(System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
   {
    if( SetInsertCommand( myCmd , Flag ) )
    {
     myCmd.ExecuteNonQuery();
     return true;
    }
   }
   return false;
  }
  /// <summary>
  /// 向数据库保存本记录
  /// </summary>
  /// <param name="Flag">附加的参数</param>
  /// <returns>操作是否成功</returns>
  public virtual bool UpdateToDB( int Flag )
  {
   using(System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
   {
    if( SetUpdateCommand( myCmd , Flag  ) )
    {
     myCmd.ExecuteNonQuery();
     return true;
    }
   }
   return false;
  }
  /// <summary>
  /// 更新指定字段到数据库中
  /// </summary>
  /// <param name="field"></param>
  /// <returns></returns>
  internal virtual bool UpdateField( DBFieldBase field)
  {
   if( this.KeyField != null 
    && myOwnerConnection != null
    && (this.DataState != System.Data.DataRowState.Added 
    || this.DataState != System.Data.DataRowState.Deleted ) )
   {
    using( System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
    {
     myCmd.CommandText = "Update " + this.RunTimeTableName + " Set " + field.FieldName + "=? Where " + this.KeyField.FieldName + "=?" ;
     myCmd.Parameters.Clear();
     this.AddParameter( myCmd , field.DBValue );
     this.AddParameter( myCmd , this.KeyField.DBValue );
     myCmd.ExecuteNonQuery();
     return true;
    }
   }
   else
    return false;
  }
  /// <summary>
  /// 更新指定字段的数据到数据库中
  /// </summary>
  /// <param name="strFieldName">字段名称</param>
  /// <returns>操作是否成功</returns>
  public virtual bool UpdateField( string strFieldName)
  {
   if( HasContent(strFieldName ) && this.KeyField != null && myOwnerConnection != null )
   {
    strFieldName = strFieldName.Trim().ToUpper();
    foreach( DBFieldBase f in myFields )
    {
     if( f.FieldName.Trim().ToUpper().Equals( strFieldName ))
     {
      using( System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
      {
       myCmd.CommandText = "Update " + this.RunTimeTableName + " Set " + f.FieldName + "=? Where " + this.KeyField.FieldName + "=?" ;
       myCmd.Parameters.Clear();
       this.AddParameter( myCmd , f.DBValue );
       this.AddParameter( myCmd , this.KeyField.DBValue );
       myCmd.ExecuteNonQuery();
       return true;
      }//using
     }
    }//foreach
   }//if
   return false;
  }//public virtual bool UpdateField()
  /// <summary>
  /// 从数据库删除本记录
  /// </summary>
  /// <param name="Flag">附加的参数</param>
  /// <returns></returns>
  public virtual bool DeleteFromDB( int Flag )
  {
   using(System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
   {
    if( this.SetDeleteCommand( myCmd , Flag ) )
    {
     myCmd.ExecuteNonQuery();
     return true;
    }
   }
   return false;
  }
  /// <summary>
  /// 判断一个字符串是否有内容,本函数和isBlankString相反
  /// </summary>
  /// <param name="strData">字符串对象</param>
  /// <returns>若字符串不为空且存在非空白字符则返回True 否则返回False</returns>
  public static bool HasContent( string strData )
  {
   if( strData != null && strData.Length > 0 )
   {
    foreach(char c in strData )
    {
     if( Char.IsWhiteSpace( c ) == false)
      return true;
    }
   }
   return false;
  }// bool HasContent()
 }//public abstract class DBRecordBase
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 
 /// <summary>
 /// 数据库记录对象集合
 /// </summary>
 public class DBRecordCollectionBase : System.Collections.CollectionBase 
 {
  /// <summary>
  /// 设置查询数据命令对象的委托
  /// </summary>
  public delegate bool SetCommandHandler( DBRecordCollectionBase Sender , System.Data.IDbCommand myCmd );
  protected DBRecordBase myParent = null;
  protected DBRecordBase myRecordInstance = null;
  protected System.Data.IDbConnection myOwnerConnection = null;
  protected bool bolLoaded = false;
  /// <summary>
  /// 从数据读取器中开始读取记录的从0开始的序号,小于等于0表示无限制
  /// </summary>
  protected int intReadRecordStartIndex = 0 ;
  /// <summary>
  /// 本容器包含的记录对象的最大个数,小于等于0表示无限制
  /// </summary>
  protected int intRecordMaxCount = 0 ;
  /// <summary>
  /// 设置SQL命令对象的委托
  /// </summary>
  public SetCommandHandler SelectCommandDelegate = null;

  /// <summary>
  /// 无作为的初始化对象
  /// </summary>
  public DBRecordCollectionBase()
  {
  }
  /// <summary>
  /// 设置记录实例的初始化对象
  /// </summary>
  /// <param name="vRecordInstance"></param>
  public DBRecordCollectionBase( DBRecordBase vRecordInstance)
  {
   myRecordInstance = vRecordInstance ;
  }
  /// <summary>
  /// 从数据读取器中开始读取记录的从0开始的序号,小于等于0表示无限制
  /// </summary>
  public int ReadRecordStartIndex
  {
   get{ return intReadRecordStartIndex ;}
   set{ intReadRecordStartIndex = value;}
  }
  /// <summary>
  /// 本容器包含的记录对象的最大个数,小于等于0表示无限制
  /// </summary>
  public int RecordMaxCount
  {
   get{ return intRecordMaxCount;}
   set{ intRecordMaxCount = value;}
  }
  
  /// <summary>
  /// 本集合所属的记录对象
  /// </summary>
  public DBRecordBase Parent
  {
   get{ return myParent ;}
   set{ myParent = value;}
  }
  /// <summary>
  /// 记录对象实例
  /// </summary>
  public DBRecordBase RecordInstance
  {
   get{ return myRecordInstance ;}
   set{ myRecordInstance = value;}
  }
  /// <summary>
  /// 读取数据所使用的数据库连接对象
  /// </summary>
  public System.Data.IDbConnection OwnerConnection
  {
   get{ return myOwnerConnection ;}
   set{ myOwnerConnection = value;}
  }
  /// <summary>
  /// 列表内容是否加载
  /// </summary>
  public bool Loaded
  {
   get{ return bolLoaded ; }
   set{ bolLoaded = value; }
  }
  /// <summary>
  /// 检查是否加载对象的标记,若尚未加载则加载对象,返回加载标记
  /// </summary>
  /// <returns></returns>
  public bool CheckLoaded()
  {
   if( bolLoaded == false)
   {
    base.InnerList.Clear();
    this.LoadRecord();
   }
   return bolLoaded ;
  }
  /// <summary>
  /// 读取数据库,加载记录对象
  /// </summary>
  /// <returns>加载的记录对象个数</returns>
  public int LoadRecord()
  {
   if( myOwnerConnection == null && myParent != null)
    myOwnerConnection = myParent.OwnerConnection ;
   using( System.Data.IDbCommand myCmd = myOwnerConnection.CreateCommand())
   {
    if( SetSelectCommand( myCmd ) == false)
     return -1 ;
    System.Data.IDataReader myReader = myCmd.ExecuteReader( System.Data.CommandBehavior.SingleResult );
    int RecordCount = FromReader( myReader );
    myReader.Close();
    if( RecordCount >= 0 )
     bolLoaded = true;
    return RecordCount ;
   }//using
  }
  /// <summary>
  /// 设置查询数据时使用的SQL命令对象
  /// </summary>
  /// <param name="myCmd">SQL命令对象</param>
  /// <returns>操作是否成功</returns>
  protected virtual bool SetSelectCommand( System.Data.IDbCommand myCmd )
  {
   if( SelectCommandDelegate != null)
   {
    return SelectCommandDelegate( this , myCmd ) ;
   }
   if( myRecordInstance != null)
    return myRecordInstance.SetSelectCommand( myCmd , 2 );
   return false;
  }
  /// <summary>
  /// 从一个数据读取器加载记录对象
  /// </summary>
  /// <param name="myReader">数据读取器</param>
  /// <returns>读取的记录个数</returns>
  public int FromReader( System.Data.IDataReader myReader)
  {
   int iCount = -1 ;
   if( myRecordInstance != null && myReader != null)
   {
    if( this.intReadRecordStartIndex > 0 )
    {
     for( iCount = 0 ; iCount < intReadRecordStartIndex ; iCount ++ )
     {
      if( myReader.Read() == false)
       break;
     }
    }
    iCount = 0 ;
    while( myReader.Read())
    {
     DBRecordBase NewRecord = myRecordInstance.NewInstance();
     if( NewRecord != null && NewRecord.FromReader( myReader ))
     {
      this.InnerList.Add( NewRecord );
      iCount ++ ;
      if( intRecordMaxCount > 0 && iCount >= intRecordMaxCount )
       break;
     }
    }//while
   }//if
   return iCount ;
  }//public int FromReader()
  /// <summary>
  /// 将对象数据保存到一个XML书写器中
  /// </summary>
  /// <param name="myWriter">XML书写器</param>
  /// <returns>操作是否成功</returns>
  public virtual bool ToXML( System.Xml.XmlWriter myWriter )
  {
   if( myWriter != null)
   {
    if( this.CheckLoaded())
    {
     foreach( DBRecordBase myRecord in base.InnerList )
     {
      myWriter.WriteStartElement( myRecord.TableName );
      myRecord.ToXML( myWriter );
      myWriter.WriteEndElement();
     }
     return true;
    }
   }
   return false;
  }
  /// <summary>
  /// 向列表添加一个记录对象
  /// </summary>
  /// <param name="NewRecord">记录对象</param>
  /// <returns>新增记录在列表中的序号</returns>
  public int Append( DBRecordBase NewRecord )
  {
   if( NewRecord == null)
    throw new System.NullReferenceException("Param NewRecord is null");
   if( myRecordInstance != null )
   {
    if( myRecordInstance.GetType().Equals( NewRecord.GetType()) == false)
    {
     throw new System.InvalidCastException("对象类型不匹配");
    }
   }
   return base.InnerList.Add( NewRecord );
  }
  //
  //  /// <summary>
  //  /// 返回指定序号的数据库记录对象
  //  /// </summary>
  //  public virtual DBRecordBase this[int index]
  //  {
  //   get
  //   {
  //    if( this.CheckLoaded())
  //     return ( DBRecordBase ) base.InnerList[index] ;
  //    else
  //     return null;
  //   }
  //  }
  new public System.Collections.IEnumerator GetEnumerator()
  {
   if( this.CheckLoaded() )
    return base.InnerList.GetEnumerator();
   else
    return null;
  }
  /// <summary>
  /// 将所有的记录对象组织为一个记录对象数组
  /// </summary>
  /// <returns></returns>
  public DBRecordBase[] ToArray()
  {
   DBRecordBase[] myArray = new DBRecordBase[ this.Count ];
   for(int iCount = 0 ; iCount < this.Count ; iCount ++ )
    myArray[iCount] = ( DBRecordBase ) base.InnerList[iCount];
   return myArray ;
  }
 }//public class DBRecordCollectionBase

 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************
 //*********************************************************************************************

 
 //*************************************************************************************************
 //  文件名 USERTABLE.cs 
 //*************************************************************************************************
 /// <summary>
 /// 数据库表 USERTABLE [用户表] 操作对象 , 该表有5个字段 关键字段 UserID
 /// </summary>
 public class DB_USERTABLE : DBRecordBase
 {   
  #region 定义字段类型 **********************************************************************
 
  // 用户编号      字段 UserID      类型:varchar(20) 关键字段
  internal class DB_USERTABLE_UserID : DBStringField 
  {
   public override string FieldName{ get{ return "USERID" ; } }
   public override bool KeyField{ get{ return true;}} 
  }
  // 用户姓名      字段 UserName    类型:varchar(20)
  internal class DB_USERTABLE_UserName : DBStringField 
  {
   public override string FieldName{ get{ return "USERNAME" ; } }
  }
  // 密码          字段 Password    类型:varchar(20)
  internal class DB_USERTABLE_Password : DBStringField 
  {
   public override string FieldName{ get{ return "PASSWORD" ; } }
  }
  // 用户注册时间  字段 RegTime     类型:varchar(14)
  internal class DB_USERTABLE_RegTime : DB14DBDateField 
  {
   public override string FieldName{ get{ return "REGTIME" ; } }
  }
  // 登录次数      字段 LoginCount  类型:int()
  internal class DB_USERTABLE_LoginCount : DBStringField 
  {
   public override string FieldName{ get{ return "LOGINCOUNT" ; } }
  }
 
  #endregion
 
 
  #region 定义字段类型 **********************************************************************
 
 
  /// <summary>
  /// 用户编号 UserID [关键字段]
  /// </summary>
  public string mUserID
  {
   get{ return ( ( DBStringField ) myFields[ 0 ] ).StringValue ; }
   set{ ( ( DBStringField ) myFields[ 0 ] ).StringValue = value; }
  }
 
  /// <summary>
  /// 用户姓名 UserName
  /// </summary>
  public string mUserName
  {
   get{ return ( ( DBStringField ) myFields[ 1 ] ).StringValue ; }
   set{ ( ( DBStringField ) myFields[ 1 ] ).StringValue = value; }
  }
 
  /// <summary>
  /// 密码 Password
  /// </summary>
  public string mPassword
  {
   get{ return ( ( DBStringField ) myFields[ 2 ] ).StringValue ; }
   set{ ( ( DBStringField ) myFields[ 2 ] ).StringValue = value; }
  }
 
  /// <summary>
  /// 用户注册时间 RegTime
  /// </summary>
  public System.DateTime mRegTime
  {
   get{ return ( ( DB14DBDateField ) myFields[ 3 ] ).DateTimeValue ; }
   set{ ( ( DB14DBDateField ) myFields[ 3 ] ).DateTimeValue = value; }
  }
 
  /// <summary>
  /// 登录次数 LoginCount
  /// </summary>
  public string mLoginCount
  {
   get{ return ( ( DBStringField ) myFields[ 4 ] ).StringValue ; }
   set{ ( ( DBStringField ) myFields[ 4 ] ).StringValue = value; }
  }
 
  #endregion

  /// <summary>
  /// 已重载:获得数据表名称
  /// </summary>
  /// <returns>表的名称</returns>
  public override string TableName
  {
   get{ return "USERTABLE"; }
  }
 
  /// <summary>
  /// 已重载:创建一个对象实例,对象类型为 DB_USERTABLE
  /// </summary>
  /// <returns>创建的对象的实例</returns>
  public override DBRecordBase NewInstance() 
  {
   return new DB_USERTABLE() ;
  }
 
 
  // 初始化对象
  public DB_USERTABLE()
  {
   myFields = new DBFieldBase[ 5 ] ;
  
   myFields[ 0  ] = new DB_USERTABLE_UserID();      // 用户编号      字段 UserID      类型:varchar(20) 关键字段
   myFields[ 1  ] = new DB_USERTABLE_UserName();    // 用户姓名      字段 UserName    类型:varchar(20)
   myFields[ 2  ] = new DB_USERTABLE_Password();    // 密码          字段 Password    类型:varchar(20)
   myFields[ 3  ] = new DB_USERTABLE_RegTime();     // 用户注册时间  字段 RegTime     类型:varchar(14)
   myFields[ 4  ] = new DB_USERTABLE_LoginCount();  // 登录次数      字段 LoginCount  类型:int() 
   foreach( DBFieldBase f in myFields )
    f.OwnerRecord = this ;
  }
 
 }// 数据库操作类 DB_USERTABLE 定义结束
 /// <summary>
 /// 数据库表 USERTABLE [用户表] 操作对象集合
 /// </summary>
 public class USERTABLECollection : DBRecordCollectionBase
 {
  private DB_USERTABLE myRecord ;
  /// <summary>
  /// 已重载:返回指定序号的数据库记录对象
  /// </summary>
  public DB_USERTABLE this[int index]
  {
   get{ return ( DB_USERTABLE ) base.InnerList[index] ;}
  }
  protected override bool SetSelectCommand(System.Data.IDbCommand myCmd)
  {
   myCmd.CommandText = myRecordInstance.GetSelectSQL() ;
   return true;
  }
  ///<summary>
  /// 初始化对象
  ///</summary>
  public USERTABLECollection()
  {
   myRecord = new DB_USERTABLE();
   myRecordInstance = myRecord ;
  }
 }//public class USERTABLECollection : DBRecordCollectionBase
}

posted on 2005-09-02 14:19  千里独行  阅读(849)  评论(0)    收藏  举报