首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

反射,该如何处理

2012-01-30 
反射请问如何通过反射调用DATASET?谢谢 [解决办法]首先定义两个实体类:OFFICEData,UserData--------------

反射
请问如何通过反射调用DATASET?

谢谢


[解决办法]
首先定义两个实体类:OFFICEData,UserData
--------------------------------------
OFFICEData:
[System.ComponentModel.DesignerCategory( "Code ")]
[SerializableAttribute]
public class OFFICEData: DataSet,ISerializable
{


public const string T_OFFICE_OFFICEID= "OFFICEID ";
public const string T_OFFICE_CODENO= "CODENO ";
public const string T_OFFICE_SPELLNO= "SPELLNO ";
public const string T_OFFICE_CUSTOMNO= "CUSTOMNO ";
public const string T_OFFICE_STROKENO= "STROKENO ";
public const string T_OFFICE_OFFICE= "OFFICE ";
public const string T_OFFICE_DISEASEAREA= "DISEASEAREA ";
public const string T_OFFICE_BEDAMOUNT= "BEDAMOUNT ";
public const string T_OFFICE_LIMITFUND= "LIMITFUND ";
public const string T_OFFICE_OFFICETYPE= "OFFICETYPE ";
public const string T_OFFICE_DEPARTMENT= "DEPARTMENT ";
public const string T_OFFICE_POSITION= "POSITION ";



private DataTable table;
private DataColumn col;
private ArrayList list;

private UserData user = new UserData();
public UserData userData
{
get{return this.user ;}
set{this.user = value;}
}

private OFFICEData(SerializationInfo info, StreamingContext context) : base(info, context)
{
userData=(UserData)info.GetValue( "myData ",typeof(Serialize.UserData));
}

public OFFICEData()
{

BuildDataTables();
}

public void GetObjectData(SerializationInfo info,StreamingContext text)
{
Type t = typeof(DataSet);

MethodInfo mi =t.GetMethod( "System.Runtime.Serialization.ISerializable.GetObjectData ",BindingFlags.Instance |BindingFlags.NonPublic );
mi.Invoke(this,new object[]{info,text});

info.AddValue( "myData ",userData);
}

//构建业务实体类的结构。
private void BuildDataTables()
{

table = new DataTable( "T_OFFICE ");

table.Columns.Add( "OFFICEID ",typeof(System.Decimal));
table.Columns.Add( "CODENO ",typeof(System.String));
table.Columns.Add( "SPELLNO ",typeof(System.String));
table.Columns.Add( "CUSTOMNO ",typeof(System.String));
table.Columns.Add( "STROKENO ",typeof(System.String));
table.Columns.Add( "OFFICE ",typeof(System.String));
table.Columns.Add( "DISEASEAREA ",typeof(System.String));
table.Columns.Add( "BEDAMOUNT ",typeof(System.Decimal));
table.Columns.Add( "LIMITFUND ",typeof(System.Decimal));
table.Columns.Add( "OFFICETYPE ",typeof(System.String));
table.Columns.Add( "DEPARTMENT ",typeof(System.String));


table.Columns.Add( "POSITION ",typeof(System.String));
list=new ArrayList();

col=table.Columns[ "OFFICEID "];
list.Add(col);


table.PrimaryKey=(DataColumn[])list.ToArray(typeof(DataColumn));
this.Tables.Add(table);
}
}
-------
UserData:
[System.ComponentModel.DesignerCategory( "Code ")]
[SerializableAttribute]
public class UserData: DataSet
{


public const string T_USERS_UserID= "UserID ";
public const string T_USERS_CodeNo= "CodeNo ";
public const string T_USERS_SpellNo= "SpellNo ";
public const string T_USERS_CustomNo= "CustomNo ";
public const string T_USERS_StrokeNo= "StrokeNo ";
public const string T_USERS_UserName= "UserName ";
public const string T_USERS_Sex= "Sex ";
public const string T_USERS_Birthday= "Birthday ";
public const string T_USERS_Nation= "Nation ";
public const string T_USERS_Diploma= "Diploma ";
public const string T_USERS_Office= "Office ";
public const string T_USERS_LaborageNo= "LaborageNo ";
public const string T_USERS_Duty= "Duty ";
public const string T_USERS_PledgeMoney= "PledgeMoney ";
public const string T_USERS_WorkKind= "WorkKind ";

private DataTable table;
private DataColumn col;
private ArrayList list;


private UserData(SerializationInfo info, StreamingContext context) : base(info, context)
{
}

public UserData()
{

BuildDataTables();
}

//构建业务实体类的结构。
private void BuildDataTables()
{

table = new DataTable( "T_USERS ");

table.Columns.Add( "UserID ",typeof(System.Int32));
table.Columns.Add( "CodeNo ",typeof(System.String));
table.Columns.Add( "SpellNo ",typeof(System.String));
table.Columns.Add( "CustomNo ",typeof(System.String));
table.Columns.Add( "StrokeNo ",typeof(System.String));
table.Columns.Add( "UserName ",typeof(System.String));
table.Columns.Add( "Sex ",typeof(System.String));
table.Columns.Add( "Birthday ",typeof(System.DateTime));
table.Columns.Add( "Nation ",typeof(System.String));
table.Columns.Add( "Diploma ",typeof(System.String));
table.Columns.Add( "Office ",typeof(System.String));
table.Columns.Add( "LaborageNo ",typeof(System.String));
table.Columns.Add( "Duty ",typeof(System.String));
table.Columns.Add( "PledgeMoney ",typeof(System.Decimal));
table.Columns.Add( "WorkKind ",typeof(System.String));


list=new ArrayList();

col=table.Columns[ "UserID "];
list.Add(col);

table.PrimaryKey=(DataColumn[])list.ToArray(typeof(DataColumn));
this.Tables.Add(table);

}
}
-----------
因为DataSet实现了序列化接口ISerializable,而基类的DataSet.GetObjectData是私有的,
如果从实现了 ISerializable 的类派生出一个新的类,则只要新的类中含有任何需要序列化的变量,
就必须同时实现构造函数以及 GetObjectData 方法
DataSet实现了ISerializable,但是,他确封装了GetObjectData方法
所以在OFFICEData.GetObjectData中利用反射调用DataSet.GetObjectData方法.

热点排行