利用C#反射实现存储视图和呈现视图分离的软件架构

本文通过C#特性和反射功能,实现了数据存储和视图模型之间的一个自定义转换,实现了存储和呈现的分离,从设计模式上避免了在面向对象的开发环境中使用SQL语句直接绕过对象继承系统直接操作存储结构的做法,值得同行借鉴.
所支持的视图转换包括:从数据存储ID到NAME的一个转换,从枚举值到枚举名称的一个转换,从存储对象模型到UI对象模型的一个转换.
建议将存储对象定义直接从数据库定义生成(利用存储代码生成器),然后在UI生成器上配置对应的视图呈现特性,最后完成UI的自动生成工作.

//特性定义部分:

/// <summary>
/// 呈现特性定义类
/// </summary>
[AttributeUsage(AttributeTargets.Property)]
public class PresentAttribute:System.Attribute
{
 protected bool _present;
 protected int _index;
 protected string _caption;
 protected Type _reference;
 protected string _getMethod; 
 protected bool _isInstanceMethod;
 public PresentAttribute(bool present,string caption,int index,Type reference,string getMethod,bool isInstanceMethod)
 {
  _present = present;
  _index = index;
  _caption = caption;
  _reference = reference;
  _getMethod =  getMethod;
  _isInstanceMethod = isInstanceMethod;
 }
 public PresentAttribute(bool present,string caption,Type reference,string getMethod):this(present,caption,0,reference,getMethod,false)
 {
 
 }
 public PresentAttribute(bool present,string caption,Type reference,string getMethod,bool isInstanceMethod):this(present,caption,0,reference,getMethod,isInstanceMethod)
 {
 
 }
 public PresentAttribute(bool present,string caption,Type reference):this(present,caption,0,reference,null,false)
 {
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="present">是否显示</param>  
 /// <param name="caption">显示标题</param>
 /// <param name="index">显示索引(从0开始)</param>
 public PresentAttribute(bool present,string caption,int index):this(present,caption,index,null,null,false)
 {
  
 }
 public PresentAttribute(bool present,string caption):this(present,caption,0,null,null,false)
 {
  
 }
 public PresentAttribute():this(false,null,0)
 {
  
 }
 /// <summary>
 /// 是否显示
 /// </summary>
 public bool Present{get{return _present;}}
 /// <summary>
 /// 显示索引(从0开始)
 /// </summary>
 public int Index{get{return _index;}}
 /// <summary>
 /// 显示标题
 /// </summary>
 public string Caption{get{return _caption;}}
 /// <summary>
 /// 引用类型:通常是对另一个DO类型的引用
 /// </summary>
 public Type Reference{get{return this._reference;}}
 /// <summary>
 /// 获取方法:通常是一个通过id获取name的方法
 /// </summary>
 public string GetMethod{get{return this._getMethod;}}
 /// <summary>
 /// 实例方法:返回false代表一个静态方法
 /// </summary>
 public bool IsInstanceMethod{get{return this._isInstanceMethod;}}

//反射逻辑部分:

/// <summary>
/// GridUtil 的摘要说明。
/// </summary>
public class DataGridUtil
{
 /// <summary>
 /// 为指定的DataTable添加列名集合
 /// </summary>
 /// <param name="curTable">目标DataTable</param>
 /// <param name="columns">列集合</param>
 /// <returns>已成功添加列集合的DataTable</returns>
 protected static DataTable PrepareTableColumn(DataTable curTable,params string[] columns)
 {
  curTable.Columns.Clear();
  foreach(string caption in columns)
  {
   DataColumn column = new DataColumn();
   column.ColumnName = caption;
   column.DataType = typeof(string);
   curTable.Columns.Add(column);
  } 
  return curTable;
 }
 /// <summary>
 /// 为指定的DataTable添加列名集合
 /// </summary>
 /// <param name="curTable">目标DataTable</param>
 /// <param name="curObj">已绑定PresentAttribute特性的对象实例</param>
 /// <returns>已成功添加列集合的DataTable</returns>
 protected static DataTable PrepareTableColumn(DataTable curTable,object curObj)
 {
  curTable.Columns.Clear();
  ///获取所有属性
  PropertyInfo[] propers = curObj.GetType().GetProperties();
  foreach(PropertyInfo p in propers)
  {
   ///获取该属性上对应的PresentAttribute特性值
   PresentAttribute[] presents = (PresentAttribute[])p.GetCustomAttributes(typeof(PresentAttribute),false);
   ///如果该属性的PresentAttribute特性值说明该属性需要进行显示
   if(presents[0].Present)
   {
    ///为目标数据表添加列信息     
    DataColumn column = new DataColumn();
    column.ColumnName = presents[0].Caption;
    column.DataType = p.GetType();
    curTable.Columns.Add(column);
   }
  } 
  return curTable;
 }
 /// <summary>
 /// 为已绑定PresentAttribute特性的对象实例数组自动生成一个DataTable
 /// </summary>
 /// <param name="objects">已绑定PresentAttribute特性的对象实例数组</param>
 /// <param name="columns">默认的列名定义集合(该集合仅在objects对象实例数组Length == 0时被使用)</param>
 /// <returns>已成功添加列集合且已自动生成对应数据行的DataTable</returns>
 public static DataTable PrepareDataTable(object[] objects, string[] columns)
 {
  DataTable curTable = null;
  ///为空则为目标数据表添加一个默认的列显示
  if(objects.Length == 0)
  {
   curTable = PrepareTableColumn(new DataTable(),columns);
   return curTable;
  }
  ///声明列结构
  curTable = PrepareTableColumn(new DataTable(),objects[0]);   
  foreach(object o in objects)
  {
   ///获取所有属性
   PropertyInfo[] propers = o.GetType().GetProperties();
   ///创建一个新行
   DataRow newRow = curTable.NewRow();
   ///对每一个属性进行遍历
   foreach(PropertyInfo p in propers)
   {
    ///获取该属性上对应的PresentAttribute特性值
    PresentAttribute[] presents = (PresentAttribute[])p.GetCustomAttributes(typeof(PresentAttribute),false);
    ///如果该属性的PresentAttribute特性值说明该属性需要进行显示
    if(presents[0].Present)
    {
     if(presents[0].Reference == null)
     {
      ///将新行中指定列的值设置为当前属性的值
      newRow[presents[0].Caption] = p.GetValue(o,null).ToString();
     }
     ///是一个引用类型,需要利用反射进行转换
     else
     {
      ///获取当前属性的值
      object needTransVal = p.GetValue(o,null);
      ///获取当前属性的引用类型
      Type refType = presents[0].Reference;      
      if(refType.IsEnum)
      {
       ///调用当前属性的getMethod方法所声明的方法,调用该方法以获取目标值,以完成诸如从枚举值到枚举名称的一个转换
       object targetVal = null;
       targetVal = EnumUtil.GetEnumName(refType,needTransVal);
       if(targetVal != null)
        ///将新行中指定列的值设置为转换后的值
        newRow[presents[0].Caption] = targetVal.ToString();
       else
        newRow[presents[0].Caption] = DBNull.Value;
      }
      else
      {
       
       ///创建一个引用类型的对象
       object refObj = refType.Assembly.CreateInstance(refType.FullName);
       ///调用当前属性的getMethod方法所声明的方法,调用该方法以获取目标值,以完成诸如从id到name的一个转换
       object targetVal = null;
       if(presents[0].IsInstanceMethod)
       {
        targetVal = refType.InvokeMember(presents[0].GetMethod,BindingFlags.Public|BindingFlags.Instance|BindingFlags.InvokeMethod,null,refObj,new object[]{needTransVal});
       }
       else
       {
        targetVal = refType.InvokeMember(presents[0].GetMethod,BindingFlags.Public|BindingFlags.Static|BindingFlags.InvokeMethod,null,null,new object[]{needTransVal});
       }
       if(targetVal != null)
        ///将新行中指定列的值设置为转换后的值
        newRow[presents[0].Caption] = targetVal.ToString();
       else
        newRow[presents[0].Caption] = DBNull.Value;
      }
     }
    }
   }
   curTable.Rows.Add(newRow);
  }
  return curTable;
 }
 
}

/// <summary>
/// EnumUtil 的摘要说明。
/// </summary>
public class EnumUtil
{
 /// <summary>
 /// 完成指定枚举的从名称到值的转换
 /// </summary>
 /// <param name="curEnum">指定枚举</param>
 /// <param name="curName">名称</param>
 /// <returns>值</returns>
 public static int GetEnumValue(Type curEnum,object curName)
 {
  int value = int.MinValue;
  if(curName != null)
  {
   string[] names = Enum.GetNames(curEnum);
   int[] values = (int[])Enum.GetValues(curEnum);
   for(int i = 0; i < names.Length; i ++)
   {
    if(names[i] == curName.ToString())
    {
     value = values[i];
     break;
    }
   }
  }
  return value;
 }
 /// <summary>
 /// 完成指定枚举的从值到名称的转换
 /// </summary>
 /// <param name="curEnum">指定枚举</param>
 /// <param name="curValue">值</param>
 /// <returns>名称</returns>
 public static string GetEnumName(Type curEnum,object curValue)
 {
  return Enum.GetName(curEnum,curValue);   
 }
}

//数据定义部分

/// <summary>
/// 方案信息存储对象
/// </summary>
public class INS_DADP_SCHEME
{
 protected int _id;
 protected string _name;
 protected string _summary;
 protected int _datasource_type;
 protected int _datasource_id;
 protected int _dataobjective_id;
 protected int _strategy_type;
 protected string _fire_dates;
 protected string _fire_time;
 protected string _create_time;
 protected int _create_user_id;
 protected string _modi_time;
 protected int _modi_user_id;
 protected int _state;
 [PresentAttribute(true,"方案ID")]
 public int Id{get{return this._id;}set{this._id = value;}}
 [PresentAttribute(true,"方案名称")]
 public string Name{get{return this._name;}set{this._name = value;}}
 [PresentAttribute(true,"方案描述")]
 public string Summary{get{return this._summary;}set{this._summary = value;}}
 [PresentAttribute()]
 public int DataSource_Type{get{return this._datasource_type;}set{this._datasource_type = value;}}
 [PresentAttribute()]
 public int DataSource_Id{get{return this._datasource_id;}set{this._datasource_id = value;}}
 [PresentAttribute()]
 public int DataObjective_Id{get{return this._dataobjective_id;}set{this._dataobjective_id = value;}}
 [PresentAttribute()]
 public int Strategy_Type{get{return this._strategy_type;}set{this._strategy_type = value;}}
 [PresentAttribute()]
 public string Fire_Dates{get{return this._fire_dates;}set{this._fire_dates = value;}}
 [PresentAttribute()]
 public string Fire_Time{get{return this._fire_time;}set{this._fire_time = value;}}
 [PresentAttribute(true,"创建时间")]
 public string Create_Time{get{return this._create_time;}set{this._create_time = value;}}
 //此处定义为从一个数据对象ID到NAME的转换
 [PresentAttribute(true,"创建用户",typeof(INS_DADP_USER),"GetUserName",false)]
 public int Create_User_Id{get{return this._create_user_id;}set{this._create_user_id = value;}}
 [PresentAttribute(true,"修改时间")]
 public string Modi_Time{get{return this._modi_time;}set{this._modi_time = value;}}
 //此处定义为从一个数据对象ID到NAME的转换
 [PresentAttribute(true,"修改用户",typeof(INS_DADP_USER),"GetUserName",false)]
 public int Modi_User_Id{get{return this._modi_user_id;}set{this._modi_user_id = value;}}
 //此处定义为从一个枚举对象值到名称的转换
 [PresentAttribute(true,"启用状态",typeof(SchemeState))]
 public int State{get{return this._state;}set{this._state = value;}}

 public static string GetSchemeName(int id)
 {
  INS_DADP_SCHEME curScheme = Get(id);
  if(curScheme == null)return null;
  else
  return curScheme.Name;
 }
 public static INS_DADP_SCHEME Get(int id)
 {
  const string sSql = "select  ID, Name, Summary,DataSource_Type,DataSource_ID,DataObjective_ID,Strategy_Type,Fire_Dates,Fire_Time,Create_Time,Create_User_ID,Modi_Time,Modi_User_ID,State from INS_DADP_SCHEME where  ID = @ID ";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[1];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@ID";
  parameters[0].Size = 10;
  parameters[0].OleDbType = OleDbType.Integer;
  parameters[0].Value = id;
  #endregion
  #region Push Block
  INS_DADP_SCHEME dataObj = null;
  ArrayList objArray = new ArrayList();
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbConnection connection = OleDbHelper.PopConnection();
  OleDbDataReader sqlReader = OleDbHelper.ExecuteReader(sSql,parameters,connection);
  while (sqlReader.Read())
  {
   dataObj = new INS_DADP_SCHEME();
   if(!sqlReader.IsDBNull(0))
    dataObj.Id = sqlReader.GetInt32(0);
   if(!sqlReader.IsDBNull(1))
    dataObj.Name = sqlReader.GetString(1);
   if(!sqlReader.IsDBNull(2))
    dataObj.Summary = sqlReader.GetString(2); 
   if(!sqlReader.IsDBNull(3))
    dataObj.DataSource_Type = sqlReader.GetInt32(3);
   if(!sqlReader.IsDBNull(4))
    dataObj.DataSource_Id = sqlReader.GetInt32(4); 
   if(!sqlReader.IsDBNull(5))
    dataObj.DataObjective_Id = sqlReader.GetInt32(5); 
   if(!sqlReader.IsDBNull(6))
    dataObj.Strategy_Type = sqlReader.GetInt32(6);
   if(!sqlReader.IsDBNull(7))
    dataObj.Fire_Dates = sqlReader.GetString(7); 
   if(!sqlReader.IsDBNull(8))
    dataObj.Fire_Time = sqlReader.GetString(8);
   if(!sqlReader.IsDBNull(9))
    dataObj.Create_Time = sqlReader.GetString(9); 
   if(!sqlReader.IsDBNull(10))
    dataObj.Create_User_Id = sqlReader.GetInt32(10);
   if(!sqlReader.IsDBNull(11))
    dataObj.Modi_Time = sqlReader.GetString(11); 
   if(!sqlReader.IsDBNull(12))
    dataObj.Modi_User_Id = sqlReader.GetInt32(12);
   if(!sqlReader.IsDBNull(13))
    dataObj.State = sqlReader.GetInt32(13);    
   objArray.Add(dataObj);
  }
  sqlReader.Close();
  OleDbHelper.PushConnection(connection);
  #endregion
  INS_DADP_SCHEME[] objs = new INS_DADP_SCHEME[objArray.Count];
  objArray.CopyTo(0,objs,0,objs.Length);
  return objs.Length == 0 ? null:objs[0];
 }
 public static INS_DADP_SCHEME[] List()
 {
  const string sSql = "select  ID, Name, Summary,DataSource_Type,DataSource_ID,DataObjective_ID,Strategy_Type,Fire_Dates,Fire_Time,Create_Time,Create_User_ID,Modi_Time,Modi_User_ID,State from INS_DADP_SCHEME ";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[0];
  #endregion
  #region Push Block
  INS_DADP_SCHEME dataObj = null;
  ArrayList objArray = new ArrayList();
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbConnection connection = OleDbHelper.PopConnection();
  OleDbDataReader sqlReader = OleDbHelper.ExecuteReader(sSql,parameters,connection);
  while (sqlReader.Read())
  {
   dataObj = new INS_DADP_SCHEME();
   if(!sqlReader.IsDBNull(0))
    dataObj.Id = sqlReader.GetInt32(0);
   if(!sqlReader.IsDBNull(1))
    dataObj.Name = sqlReader.GetString(1);
   if(!sqlReader.IsDBNull(2))
    dataObj.Summary = sqlReader.GetString(2); 
   if(!sqlReader.IsDBNull(3))
    dataObj.DataSource_Type = sqlReader.GetInt32(3);
   if(!sqlReader.IsDBNull(4))
    dataObj.DataSource_Id = sqlReader.GetInt32(4); 
   if(!sqlReader.IsDBNull(5))
    dataObj.DataObjective_Id = sqlReader.GetInt32(5); 
   if(!sqlReader.IsDBNull(6))
    dataObj.Strategy_Type = sqlReader.GetInt32(6);
   if(!sqlReader.IsDBNull(7))
    dataObj.Fire_Dates = sqlReader.GetString(7); 
   if(!sqlReader.IsDBNull(8))
    dataObj.Fire_Time = sqlReader.GetString(8);
   if(!sqlReader.IsDBNull(9))
    dataObj.Create_Time = sqlReader.GetString(9); 
   if(!sqlReader.IsDBNull(10))
    dataObj.Create_User_Id = sqlReader.GetInt32(10);
   if(!sqlReader.IsDBNull(11))
    dataObj.Modi_Time = sqlReader.GetString(11); 
   if(!sqlReader.IsDBNull(12))
    dataObj.Modi_User_Id = sqlReader.GetInt32(12);
   if(!sqlReader.IsDBNull(13))
    dataObj.State = sqlReader.GetInt32(13);    
   objArray.Add(dataObj);
  }
  sqlReader.Close();
  OleDbHelper.PushConnection(connection);
  #endregion
  INS_DADP_SCHEME[] objs = new INS_DADP_SCHEME[objArray.Count];
  objArray.CopyTo(0,objs,0,objs.Length);
  return objs;   
 }
 public static void Save(INS_DADP_SCHEME curObj)
 {
  const string sSql = "insert into INS_DADP_SCHEME( Name, Summary,DataSource_Type,DataSource_ID,DataObjective_ID,Strategy_Type,Fire_Dates,Fire_Time,Create_Time,Create_User_ID,Modi_Time,Modi_User_ID,State) values (@Name, @Summary,@DataSource_Type,@DataSource_ID,@DataObjective_ID,@Strategy_Type,@Fire_Dates,@Fire_Time,@Create_Time,@Create_User_ID,@Modi_Time,@Modi_User_ID,@State);";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[13];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@Name";
  parameters[0].OleDbType = OleDbType.VarChar;
  parameters[0].Size = 500;
  parameters[0].Value = curObj.Name;
  parameters[1] = new OleDbParameter();
  parameters[1].ParameterName ="@Summary";
  parameters[1].OleDbType = OleDbType.VarChar;
  parameters[1].Size = 500;
  parameters[1].Value = curObj.Summary;
  parameters[2] = new OleDbParameter();
  parameters[2].ParameterName ="@DataSource_Type";
  parameters[2].OleDbType = OleDbType.Integer;  
  parameters[2].Value = curObj.DataSource_Type;
  parameters[3] = new OleDbParameter();
  parameters[3].ParameterName ="@DataSource_ID";
  parameters[3].OleDbType = OleDbType.Integer;
  parameters[3].Value = curObj.DataSource_Id; 
  parameters[4] = new OleDbParameter();
  parameters[4].ParameterName ="@DataObjective_ID";
  parameters[4].OleDbType = OleDbType.Integer;
  parameters[4].Value = curObj.DataObjective_Id;
  parameters[5] = new OleDbParameter();
  parameters[5].ParameterName ="@Strategy_Type";
  parameters[5].OleDbType = OleDbType.Integer;
  parameters[5].Value = curObj.Strategy_Type;
  parameters[6] = new OleDbParameter();
  parameters[6].ParameterName ="@Fire_Dates";
  parameters[6].OleDbType = OleDbType.VarChar;
  parameters[6].Size = 500;
  parameters[6].Value = curObj.Fire_Dates;
  parameters[7] = new OleDbParameter();
  parameters[7].ParameterName ="@Fire_Time";
  parameters[7].OleDbType = OleDbType.VarChar;
  parameters[7].Size = 50;
  parameters[7].Value = curObj.Fire_Time;
  parameters[8] = new OleDbParameter();
  parameters[8].ParameterName ="@Create_Time";
  parameters[8].OleDbType = OleDbType.VarChar;
  parameters[8].Size = 50;
  parameters[8].Value = curObj.Create_Time;
  parameters[9] = new OleDbParameter();
  parameters[9].ParameterName ="@Create_User_ID";
  parameters[9].OleDbType = OleDbType.Integer;
  parameters[9].Value = curObj.Create_User_Id;
  parameters[10] = new OleDbParameter();
  parameters[10].ParameterName ="@Modi_Time";
  parameters[10].OleDbType = OleDbType.VarChar;
  parameters[10].Size = 50;
  parameters[10].Value = curObj.Modi_Time;
  parameters[11] = new OleDbParameter();
  parameters[11].ParameterName ="@Modi_User_ID";
  parameters[11].OleDbType = OleDbType.Integer;
  parameters[11].Value = curObj.Modi_User_Id;
  parameters[12] = new OleDbParameter();
  parameters[12].ParameterName ="@State";
  parameters[12].OleDbType = OleDbType.Integer;
  parameters[12].Value = curObj.State;
  
  #endregion
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbHelper.ExecuteNonQuery(sSql,parameters);   
 }
 public static void Save(INS_DADP_SCHEME curObj,OleDbTransaction curTrans)
 {
  const string sSql = "insert into INS_DADP_SCHEME( Name, Summary,DataSource_Type,DataSource_ID,DataObjective_ID,Strategy_Type,Fire_Dates,Fire_Time,Create_Time,Create_User_ID,Modi_Time,Modi_User_ID,State) values (@Name, @Summary,@DataSource_Type,@DataSource_ID,@DataObjective_ID,@Strategy_Type,@Fire_Dates,@Fire_Time,@Create_Time,@Create_User_ID,@Modi_Time,@Modi_User_ID,@State);";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[13];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@Name";
  parameters[0].OleDbType = OleDbType.VarChar;
  parameters[0].Size = 500;
  parameters[0].Value = curObj.Name;
  parameters[1] = new OleDbParameter();
  parameters[1].ParameterName ="@Summary";
  parameters[1].OleDbType = OleDbType.VarChar;
  parameters[1].Size = 500;
  parameters[1].Value = curObj.Summary;
  parameters[2] = new OleDbParameter();
  parameters[2].ParameterName ="@DataSource_Type";
  parameters[2].OleDbType = OleDbType.Integer;  
  parameters[2].Value = curObj.DataSource_Type;
  parameters[3] = new OleDbParameter();
  parameters[3].ParameterName ="@DataSource_ID";
  parameters[3].OleDbType = OleDbType.Integer;
  parameters[3].Value = curObj.DataSource_Id; 
  parameters[4] = new OleDbParameter();
  parameters[4].ParameterName ="@DataObjective_ID";
  parameters[4].OleDbType = OleDbType.Integer;
  parameters[4].Value = curObj.DataObjective_Id;
  parameters[5] = new OleDbParameter();
  parameters[5].ParameterName ="@Strategy_Type";
  parameters[5].OleDbType = OleDbType.Integer;
  parameters[5].Value = curObj.Strategy_Type;
  parameters[6] = new OleDbParameter();
  parameters[6].ParameterName ="@Fire_Dates";
  parameters[6].OleDbType = OleDbType.VarChar;
  parameters[6].Size = 500;
  parameters[6].Value = curObj.Fire_Dates;
  parameters[7] = new OleDbParameter();
  parameters[7].ParameterName ="@Fire_Time";
  parameters[7].OleDbType = OleDbType.VarChar;
  parameters[7].Size = 50;
  parameters[7].Value = curObj.Fire_Time;
  parameters[8] = new OleDbParameter();
  parameters[8].ParameterName ="@Create_Time";
  parameters[8].OleDbType = OleDbType.VarChar;
  parameters[8].Size = 50;
  parameters[8].Value = curObj.Create_Time;
  parameters[9] = new OleDbParameter();
  parameters[9].ParameterName ="@Create_User_ID";
  parameters[9].OleDbType = OleDbType.Integer;
  parameters[9].Value = curObj.Create_User_Id;
  parameters[10] = new OleDbParameter();
  parameters[10].ParameterName ="@Modi_Time";
  parameters[10].OleDbType = OleDbType.VarChar;
  parameters[10].Size = 50;
  parameters[10].Value = curObj.Modi_Time;
  parameters[11] = new OleDbParameter();
  parameters[11].ParameterName ="@Modi_User_ID";
  parameters[11].OleDbType = OleDbType.Integer;
  parameters[11].Value = curObj.Modi_User_Id;
  parameters[12] = new OleDbParameter();
  parameters[12].ParameterName ="@State";
  parameters[12].OleDbType = OleDbType.Integer;
  parameters[12].Value = curObj.State;
  
  #endregion
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbHelper.ExecuteNonQuery(sSql,parameters,curTrans); 
 }
 public static void Update(INS_DADP_SCHEME curObj)
 {
  const string sSql = "update INS_DADP_SCHEME set  Name = @Name, Summary = @Summary,DataSource_Type = @DataSource_Type,DataSource_ID = @DataSource_ID,DataObjective_ID = @DataObjective_ID,Strategy_Type = @Strategy_Type,Fire_Dates = @Fire_Dates,Fire_Time =@Fire_Time,Create_Time = @Create_Time,Create_User_ID = @Create_User_ID,Modi_Time = @Modi_Time,Modi_User_ID = @Modi_User_ID,State = @State  where  ID = @ID ;";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[14];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@Name";
  parameters[0].OleDbType = OleDbType.VarChar;
  parameters[0].Size = 500;
  parameters[0].Value = curObj.Name;
  parameters[1] = new OleDbParameter();
  parameters[1].ParameterName ="@Summary";
  parameters[1].OleDbType = OleDbType.VarChar;
  parameters[1].Size = 500;
  parameters[1].Value = curObj.Summary;
  parameters[2] = new OleDbParameter();
  parameters[2].ParameterName ="@DataSource_Type";
  parameters[2].OleDbType = OleDbType.Integer;  
  parameters[2].Value = curObj.DataSource_Type;
  parameters[3] = new OleDbParameter();
  parameters[3].ParameterName ="@DataSource_ID";
  parameters[3].OleDbType = OleDbType.Integer;
  parameters[3].Value = curObj.DataSource_Id; 
  parameters[4] = new OleDbParameter();
  parameters[4].ParameterName ="@DataObjective_ID";
  parameters[4].OleDbType = OleDbType.Integer;
  parameters[4].Value = curObj.DataObjective_Id;
  parameters[5] = new OleDbParameter();
  parameters[5].ParameterName ="@Strategy_Type";
  parameters[5].OleDbType = OleDbType.Integer;
  parameters[5].Value = curObj.Strategy_Type;
  parameters[6] = new OleDbParameter();
  parameters[6].ParameterName ="@Fire_Dates";
  parameters[6].OleDbType = OleDbType.VarChar;
  parameters[6].Size = 500;
  parameters[6].Value = curObj.Fire_Dates;
  parameters[7] = new OleDbParameter();
  parameters[7].ParameterName ="@Fire_Time";
  parameters[7].OleDbType = OleDbType.VarChar;
  parameters[7].Size = 50;
  parameters[7].Value = curObj.Fire_Time;
  parameters[8] = new OleDbParameter();
  parameters[8].ParameterName ="@Create_Time";
  parameters[8].OleDbType = OleDbType.VarChar;
  parameters[8].Size = 50;
  parameters[8].Value = curObj.Create_Time;
  parameters[9] = new OleDbParameter();
  parameters[9].ParameterName ="@Create_User_ID";
  parameters[9].OleDbType = OleDbType.Integer;
  parameters[9].Value = curObj.Create_User_Id;
  parameters[10] = new OleDbParameter();
  parameters[10].ParameterName ="@Modi_Time";
  parameters[10].OleDbType = OleDbType.VarChar;
  parameters[10].Size = 50;
  parameters[10].Value = curObj.Modi_Time;
  parameters[11] = new OleDbParameter();
  parameters[11].ParameterName ="@Modi_User_ID";
  parameters[11].OleDbType = OleDbType.Integer;
  parameters[11].Value = curObj.Modi_User_Id;
  parameters[12] = new OleDbParameter();
  parameters[12].ParameterName ="@State";
  parameters[12].OleDbType = OleDbType.Integer;
  parameters[12].Value = curObj.State; 
  parameters[13] = new OleDbParameter();
  parameters[13].ParameterName ="@ID";   
  parameters[13].OleDbType = OleDbType.Integer;
  parameters[13].Value = curObj.Id;
  #endregion
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbHelper.ExecuteNonQuery(sSql,parameters); 
 }
 public static void Update(INS_DADP_SCHEME curObj,OleDbTransaction curTrans)
 {
  const string sSql = "update INS_DADP_SCHEME set  Name = @Name, Summary = @Summary,DataSource_Type = @DataSource_Type,DataSource_ID = @DataSource_ID,DataObjective_ID = @DataObjective_ID,Strategy_Type = @Strategy_Type,Fire_Dates = @Fire_Dates,Fire_Time =@Fire_Time,Create_Time = @Create_Time,Create_User_ID = @Create_User_ID,Modi_Time = @Modi_Time,Modi_User_ID = @Modi_User_ID,State = @State  where  ID = @ID ;";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[14];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@Name";
  parameters[0].OleDbType = OleDbType.VarChar;
  parameters[0].Size = 500;
  parameters[0].Value = curObj.Name;
  parameters[1] = new OleDbParameter();
  parameters[1].ParameterName ="@Summary";
  parameters[1].OleDbType = OleDbType.VarChar;
  parameters[1].Size = 500;
  parameters[1].Value = curObj.Summary;
  parameters[2] = new OleDbParameter();
  parameters[2].ParameterName ="@DataSource_Type";
  parameters[2].OleDbType = OleDbType.Integer;  
  parameters[2].Value = curObj.DataSource_Type;
  parameters[3] = new OleDbParameter();
  parameters[3].ParameterName ="@DataSource_ID";
  parameters[3].OleDbType = OleDbType.Integer;
  parameters[3].Value = curObj.DataSource_Id; 
  parameters[4] = new OleDbParameter();
  parameters[4].ParameterName ="@DataObjective_ID";
  parameters[4].OleDbType = OleDbType.Integer;
  parameters[4].Value = curObj.DataObjective_Id;
  parameters[5] = new OleDbParameter();
  parameters[5].ParameterName ="@Strategy_Type";
  parameters[5].OleDbType = OleDbType.Integer;
  parameters[5].Value = curObj.Strategy_Type;
  parameters[6] = new OleDbParameter();
  parameters[6].ParameterName ="@Fire_Dates";
  parameters[6].OleDbType = OleDbType.VarChar;
  parameters[6].Size = 500;
  parameters[6].Value = curObj.Fire_Dates;
  parameters[7] = new OleDbParameter();
  parameters[7].ParameterName ="@Fire_Time";
  parameters[7].OleDbType = OleDbType.VarChar;
  parameters[7].Size = 50;
  parameters[7].Value = curObj.Fire_Time;
  parameters[8] = new OleDbParameter();
  parameters[8].ParameterName ="@Create_Time";
  parameters[8].OleDbType = OleDbType.VarChar;
  parameters[8].Size = 50;
  parameters[8].Value = curObj.Create_Time;
  parameters[9] = new OleDbParameter();
  parameters[9].ParameterName ="@Create_User_ID";
  parameters[9].OleDbType = OleDbType.Integer;
  parameters[9].Value = curObj.Create_User_Id;
  parameters[10] = new OleDbParameter();
  parameters[10].ParameterName ="@Modi_Time";
  parameters[10].OleDbType = OleDbType.VarChar;
  parameters[10].Size = 50;
  parameters[10].Value = curObj.Modi_Time;
  parameters[11] = new OleDbParameter();
  parameters[11].ParameterName ="@Modi_User_ID";
  parameters[11].OleDbType = OleDbType.Integer;
  parameters[11].Value = curObj.Modi_User_Id;
  parameters[12] = new OleDbParameter();
  parameters[12].ParameterName ="@State";
  parameters[12].OleDbType = OleDbType.Integer;
  parameters[12].Value = curObj.State; 
  parameters[13] = new OleDbParameter();
  parameters[13].ParameterName ="@ID";   
  parameters[13].OleDbType = OleDbType.Integer;
  parameters[13].Value = curObj.Id;
  #endregion
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbHelper.ExecuteNonQuery(sSql,parameters,curTrans); 
 }
 public static void Delete(INS_DADP_SCHEME curObj)
 {
  const string sSql = "delete from INS_DADP_SCHEME where  ID = @ID ;";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[1];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@ID";
  parameters[0].Size = 10;
  parameters[0].OleDbType = OleDbType.Integer;
  parameters[0].Value = curObj.Id;
  #endregion
  OleDbHelper.ExecuteNonQuery(sSql,parameters);
 }
 public static void Delete(INS_DADP_SCHEME curObj,OleDbTransaction curTrans)
 {
  const string sSql = "delete from INS_DADP_SCHEME where  ID = @ID ;";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[1];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@ID";
  parameters[0].Size = 10;
  parameters[0].OleDbType = OleDbType.Integer;
  parameters[0].Value = curObj.Id;
  #endregion
  OleDbHelper.ExecuteNonQuery(sSql,parameters,curTrans);  
 }
}

//基础操作部分

/// <summary>
/// OleDb数据库操作助手
/// </summary>
public class OleDbHelper
{
 protected static string connectionString = null;
 protected static OleDbParameter param = null;
 public static string ConnectionString
 {
  set
  {
   connectionString = value;
  }
  get
  {
   return connectionString;
  }
 }
 public static OleDbConnection PopConnection()
 {
  if(connectionString == null)
  {
   throw new System.ArgumentNullException("连接字符串未设置");    
  }
  OleDbConnection myConn = new OleDbConnection(connectionString);
  myConn.Open();   
  return myConn;
 }
 public static void PushConnection(OleDbConnection connection)
 {
  if(connection.State.Equals(ConnectionState.Open))
   connection.Close();
 }
 public  static void  ExecuteNonQuery(string strSql)
 {
  if(connectionString == null)
  {
   throw new System.ArgumentNullException("连接字符串未设置");    
  }
  OleDbConnection myConn = new OleDbConnection(connectionString);
  OleDbCommand myCmd = new OleDbCommand(strSql,myConn);
  myConn.Open();
  myCmd.ExecuteNonQuery();
  myConn.Close();
 }
 public static DataTable ExecuteQuery(string strSql)
 {
  DataTable myTable = new DataTable();
  if(connectionString == null)
  {
   throw new System.ArgumentNullException("连接字符串未设置");
  }
  OleDbConnection myConn = new OleDbConnection(connectionString);
  OleDbDataAdapter myAdp = new OleDbDataAdapter(strSql,myConn);
  myAdp.Fill(myTable);
  return myTable; 
 }
 public static void ExecuteNonQuery(string strSql,OleDbParameter[] myParams)
 {
  if(connectionString == null)
  {
   throw new System.ArgumentNullException("连接字符串未设置");
  }
  OleDbConnection myConn = new OleDbConnection(connectionString);
  OleDbCommand myCmd = new OleDbCommand(strSql,myConn);
  foreach( OleDbParameter p in myParams )
  {
   param = new OleDbParameter();
   param.ParameterName = p.ParameterName;
   param.DbType = p.DbType;
   param.Direction = p.Direction;
   param.Size = p.Size;
   param.Value = p.Value;
   myCmd.Parameters.Add(param);
  }
  myConn.Open();
  myCmd.ExecuteNonQuery();
  myConn.Close();
 }
 public static DataTable ExecuteQuery(string strSql,OleDbParameter[] myParams)
 {
  DataTable myTable = new DataTable();
  if(connectionString == null)
  {
   throw new System.ArgumentNullException("连接字符串未设置");
  }
  OleDbConnection myConn = new OleDbConnection(connectionString);
  OleDbDataAdapter myAdp = new OleDbDataAdapter();
  myAdp.SelectCommand = new OleDbCommand();
  myAdp.SelectCommand.Connection = myConn;
  myAdp.SelectCommand.CommandText = strSql;
  foreach( OleDbParameter p in myParams )
  {
   param = new OleDbParameter();
   param.ParameterName = p.ParameterName;
   param.DbType = p.DbType;
   param.Direction = p.Direction;
   param.Size = p.Size;
   param.Value = p.Value;
   myAdp.SelectCommand.Parameters.Add(param);
  }
  myAdp.Fill(myTable);  
  return myTable;
 }
 
 public  static void  ExecuteNonQuery(string strSql,OleDbTransaction curTrans)
 {
  OleDbCommand myCmd = curTrans.Connection.CreateCommand();
  myCmd.CommandType = CommandType.Text;
  myCmd.CommandText = strSql;
  myCmd.Transaction = curTrans;   
  myCmd.ExecuteNonQuery();   
 }  
 public static void ExecuteNonQuery(string strSql,OleDbParameter[] myParams,OleDbTransaction curTrans)
 {
  OleDbCommand myCmd = curTrans.Connection.CreateCommand();
  myCmd.CommandType = CommandType.Text;
  myCmd.CommandText = strSql;
  myCmd.Transaction = curTrans; 
  foreach( OleDbParameter p in myParams )
  {
   param = new OleDbParameter();
   param.ParameterName = p.ParameterName;
   param.DbType = p.DbType;
   param.Direction = p.Direction;
   param.Size = p.Size;
   param.Value = p.Value;
   myCmd.Parameters.Add(param);
  }
  myCmd.ExecuteNonQuery();  
 }  
 public static OleDbDataReader ExecuteReader(string strSql,OleDbParameter[] myParams,OleDbConnection connection)
 {
  OleDbCommand myCmd = connection.CreateCommand();
  myCmd.CommandType = CommandType.Text;
  myCmd.CommandText = strSql;
  foreach( OleDbParameter p in myParams )
  {
   param = new OleDbParameter();
   param.ParameterName = p.ParameterName;
   param.DbType = p.DbType;
   param.Direction = p.Direction;
   param.Size = p.Size;
   param.Value = p.Value;
   myCmd.Parameters.Add(param);
  }
  return myCmd.ExecuteReader(); 
 }
 public static object SelectMaxIdInTrans(string table,OleDbTransaction curTrans)
 {
  OleDbCommand myCmd = curTrans.Connection.CreateCommand();
  myCmd.Transaction = curTrans;
  myCmd.CommandType = CommandType.Text;
  myCmd.CommandText = "select max(id) from " + table;  
  return myCmd.ExecuteScalar();
 }
}

//引用定义部分:
public enum SchemeState
{
 Open = 1,
 Close = 2
}
/// <summary>
/// 用户信息存储对象
/// </summary>
public class INS_DADP_USER
{
 protected int _id;
 protected string _user_name;
 protected string _user_pwd;
 protected string _login_time;
 [PresentAttribute()]
 public int Id{get{return this._id;}set{this._id = value;}}
 [PresentAttribute()]
 public string User_Name{get{return this._user_name;}set{this._user_name = value;}}
 [PresentAttribute()]
 public string User_Pwd{get{return this._user_pwd;}set{this._user_pwd = value;}}
 [PresentAttribute()]
 public string Login_Time{get{return this._login_time;}set{this._login_time = value;}}
 public static string GetUserName(int id)
 {
  INS_DADP_USER curUser = INS_DADP_USER.Get(id);
  if(curUser == null)return null;
  else
  return curUser.User_Name;
 }
 public static INS_DADP_USER Get(int id)
 {
  const string sSql = "select  ID, User_Name, User_Pwd,Login_Time from INS_DADP_USER where  ID = @ID ";
  #region Parameters Block
  OleDbParameter[] parameters = new OleDbParameter[1];
  parameters[0] = new OleDbParameter();
  parameters[0].ParameterName ="@ID";
  parameters[0].Size = 10;
  parameters[0].OleDbType = OleDbType.Integer;
  parameters[0].Value = id;
  #endregion
  #region Push Block
  INS_DADP_USER dataObj = null;
  ArrayList objArray = new ArrayList();
  OleDbHelper.ConnectionString = Configuration.ConnnectionString;
  OleDbConnection connection = OleDbHelper.PopConnection();
  OleDbDataReader sqlReader = OleDbHelper.ExecuteReader(sSql,parameters,connection);
  while (sqlReader.Read())
  {
   dataObj = new INS_DADP_USER();
   if(!sqlReader.IsDBNull(0))
    dataObj.Id = sqlReader.GetInt32(0);
   if(!sqlReader.IsDBNull(1))
    dataObj.User_Name = sqlReader.GetString(1);
   if(!sqlReader.IsDBNull(2))
    dataObj.User_Pwd = sqlReader.GetString(2); 
   if(!sqlReader.IsDBNull(3))
    dataObj.Login_Time = sqlReader.GetString(3);     
   objArray.Add(dataObj);
  }
  sqlReader.Close();
  OleDbHelper.PushConnection(connection);
  #endregion
  INS_DADP_USER[] objs = new INS_DADP_USER[objArray.Count];
  objArray.CopyTo(0,objs,0,objs.Length);   
  return objs.Length == 0 ? null:objs[0];
 }
 
}

//界面调用部分

private void FrmSchemeView_Load(object sender, System.EventArgs e)
{
 //加载数据
 DataBind();
 //加载组件
 ComponentBind();
}
protected void DataBind()
{
 INS_DADP_SCHEME[] schemes = INS_DADP_SCHEME.List();      
 dgSchemes.DataSource = DataGridUtil.PrepareDataTable(schemes,new string[]{"方案ID","启用状态","方案名称","方案描述","创建时间","创建用户","修改时间","修改用户"});
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值