自定義帶結構的可序列化資料集DataSet.

NO IMAGE

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