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

来源:互联网 发布:四年级数学优化答案 编辑:程序博客网 时间:2024/05/04 12:35
2005年10月03日 14:07:00

(一).说明
在编程过程中有没有遇到这样的问题: 偶尔因为某种原因,数据库表需要改一字段名称。比如:将: 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也就没有结构(没有结构不能存储数据),这时这个类就起作用了.

谢谢!



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=494547


原创粉丝点击