扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
自己定义DataSet的列字段名称: 就是建立一个类,并让此类继承DataSet. 并预先给DataSet添加一些自定义的列. 有两个优点:
1. 在引用时,直接引用: DataSet.Table[0].Row[0][Customer.Name]; 而不是: DataSet.Table[0].Row[0]["CustomerName"]; 这样,如果数据库字段名称变化时(将CustomerName改为CusName),则只需修改: Customer类的属性Name的值即可,没必要在整个程序中一个一个地搜索. 节省时间,易于维护.
2. 经常用在 添加/新增 界面中,在添加之前没有从数据库获得数据给DataSet,即客户端 与数据库交互是单向的,即只从客户端往数据库发送数据. 这时,DataSet的内部结构没有定义. 就得用自定义DataSet结构了, 定义好结构 后就可以添加数据,最后送到数据库.
(一).说明
在编程过程中有没有遇到这样的问题: 偶尔因为某种原因,数据库表需要改一字段名称。比如:将: 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也就没有结构(没有结构不能存储数据),这时这个类就起作用了.
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者