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
}