首页 > 开发 > 综合 > 正文

自定义带结构的可序列化数据集DataSet

2024-07-21 02:29:52
字体:
来源:转载
供稿:网友
注册会员,创建你的web开发资料库,

 (一).说明

  在编程过程中有没有遇到这样的问题:  偶尔因为某种原因,数据库表需要改一字段名称。比如:将: name改为: personname.

  接下来程序员就把所有涉及到的代码打开,找到类似: ds.table[0].row[n]["name"]的语句,修改成: ds.table[0].row[n]["name"].

  其实完全可以不用这么做,只加一个带结构的dataset就ok了。  修改只修改本类代码文件中的一个属性就ok了,而且除本类代码文件之外的应用程式代码根本不用修改.

 (二).代码:
 
using system;
using system.data;
using system.runtime.serialization;

namespace schemedataset
{
 /// <summary>
 /// 包含客户信息的自定义的可序列化的数据集(dataset)

 /// </summary>
 [system.componentmodel.designercategory("code")]
 [serializableattribute]
 public class customers : dataset    //继承dataset,这样可以调用dataset中的所有方法
 {
  #region 以下为常量的声明
 
  /// <summary>常量定义客户资料表 customer 的表名称</summary>
  public const string crmpscustomers_table = "customer";

  /// <summary>该常量定义客户编号的栏位名</summary>
  public const string cusno_field = "cusno";

  /// <summary>该常量定义客户名称的栏位名</summary>
  public const string customername_field = "customername";

  /// <summary>该常量定义客户地址的栏位名</summary>
  public const string address_field = "address";
 
  #endregion 以下变量、常量、及对象的声明

  #region 以下为方法声明

  public customers()
  {
      builddatatables();
  }

  /// <summary>
  ///     支持序列化的构造函数

  ///     <param name="info">对象的序列化信息</param>
  ///     <param name="context">关于被呼叫方法的上下文</param>
  /// </summary>
  private customers(serializationinfo info, streamingcontext context) : base(info, context)
  {}

  /// <summary>
  /// 创建带结构的表:customer
  /// </summary>
  private void builddatatables()
  {
   //
   // 创建crmpscustomers的数据表
   //

   datatable table = new datatable(crmpscustomers_table);
   datacolumncollection columns = table.columns;

   //定义结构
   columns.add(cusno_field,typeof(system.string));
   columns.add(customername_field,typeof(system.string));
   columns.add(address_field,typeof(system.string));

   this.tables.add(table);
   contact contact = new contact();
   this.merge(contact);   //合并
  }

  #endregion 以下为方法声明

 }
}

 (三).使用

 1.  当定义了这样一个类后,在程式中应该这样使用: 

  ds.table[customers.crmpscustomers_table].row[n][customers.customername_field];

  这样就把所有的任务交给本类代码文件了。  当修改数据库时不用修改类似这些语句。 只修改一下结构类相关属性的值即可.

 2. 定义此带结构的数据集,还有一种情况用到,就是在有些界面,ui层与数据库交互是单向的,即往数据库添加数据之前没有读取架构,则dataset也就没有结构(没有结构不能存储数据),这时这个类就起作用了.谢谢!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表