首先,查询数据库,得到所有的数据。并将所有的数据保存在DataTable中,并把查询到的表结构传给getC(DataTable t)
动态反射出bean之后,返回动态生成的MyFirstClass类。 关键问题就是我不知道如何赋值给它的set方法。希望有哪位高手可以帮我解决一下,或给点解决的办法和建议,在这里先谢谢了。
代码如下:
/// <summary>
/// GetC 构造Bean类
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
public object GetC(DataTable d)
{
object objReturn;
FieldBuilder fieldBuilder = null;//类字段
PropertyBuilder propertyBuilder = null;//类属性
MethodAttributes getSetAttr;//指定方法属性的标志
MethodBuilder methodBuilder = null;//定义并表示动态的方法
ILGenerator ilGenerator = null;//生成Microsoft 中间语言 MSIL 指令
Type[] methodArgs ={ typeof(string) };//声明类型数组 AssemblyName name = new AssemblyName();
name.Name = "MyFirstAssembly"; AppDomain ad = System.Threading.Thread.GetDomain();
AssemblyBuilder abuilder = ad.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run); ModuleBuilder mbuilder = abuilder.DefineDynamicModule("MyFirstModule"); TypeBuilder theClass = mbuilder.DefineType("MyFirstClass", TypeAttributes.Public | TypeAttributes.Class);
foreach (DataColumn dc in d.Columns)
{
fieldBuilder = theClass.DefineField( dc.ColumnName, dc.DataType, FieldAttributes.Public);
propertyBuilder = theClass.DefineProperty(dc.ColumnName, System.Reflection.PropertyAttributes.HasDefault, dc.DataType, null);
getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; methodBuilder = theClass.DefineMethod("get_" + dc.ColumnName, getSetAttr, typeof(string), Type.EmptyTypes);
ilGenerator = methodBuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldfld, fieldBuilder);
ilGenerator.Emit(OpCodes.Ret);
propertyBuilder.SetGetMethod(methodBuilder); methodBuilder = theClass.DefineMethod("set_" + dc.ColumnName,
MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName,
typeof(void), methodArgs);
ilGenerator = methodBuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldarg_1);
ilGenerator.Emit(OpCodes.Stfld, fieldBuilder);
ilGenerator.Emit(OpCodes.Ret);
propertyBuilder.SetSetMethod(methodBuilder);
}
Type ReturnClass = theClass.CreateType();//创建引用
objReturn = Activator.CreateInstance(ReturnClass);//创建实例化 return objReturn;}
动态反射出bean之后,返回动态生成的MyFirstClass类。 关键问题就是我不知道如何赋值给它的set方法。希望有哪位高手可以帮我解决一下,或给点解决的办法和建议,在这里先谢谢了。
代码如下:
/// <summary>
/// GetC 构造Bean类
/// </summary>
/// <param name="d"></param>
/// <returns></returns>
public object GetC(DataTable d)
{
object objReturn;
FieldBuilder fieldBuilder = null;//类字段
PropertyBuilder propertyBuilder = null;//类属性
MethodAttributes getSetAttr;//指定方法属性的标志
MethodBuilder methodBuilder = null;//定义并表示动态的方法
ILGenerator ilGenerator = null;//生成Microsoft 中间语言 MSIL 指令
Type[] methodArgs ={ typeof(string) };//声明类型数组 AssemblyName name = new AssemblyName();
name.Name = "MyFirstAssembly"; AppDomain ad = System.Threading.Thread.GetDomain();
AssemblyBuilder abuilder = ad.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run); ModuleBuilder mbuilder = abuilder.DefineDynamicModule("MyFirstModule"); TypeBuilder theClass = mbuilder.DefineType("MyFirstClass", TypeAttributes.Public | TypeAttributes.Class);
foreach (DataColumn dc in d.Columns)
{
fieldBuilder = theClass.DefineField( dc.ColumnName, dc.DataType, FieldAttributes.Public);
propertyBuilder = theClass.DefineProperty(dc.ColumnName, System.Reflection.PropertyAttributes.HasDefault, dc.DataType, null);
getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig; methodBuilder = theClass.DefineMethod("get_" + dc.ColumnName, getSetAttr, typeof(string), Type.EmptyTypes);
ilGenerator = methodBuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldfld, fieldBuilder);
ilGenerator.Emit(OpCodes.Ret);
propertyBuilder.SetGetMethod(methodBuilder); methodBuilder = theClass.DefineMethod("set_" + dc.ColumnName,
MethodAttributes.Public | MethodAttributes.HideBySig | MethodAttributes.SpecialName,
typeof(void), methodArgs);
ilGenerator = methodBuilder.GetILGenerator();
ilGenerator.Emit(OpCodes.Ldarg_0);
ilGenerator.Emit(OpCodes.Ldarg_1);
ilGenerator.Emit(OpCodes.Stfld, fieldBuilder);
ilGenerator.Emit(OpCodes.Ret);
propertyBuilder.SetSetMethod(methodBuilder);
}
Type ReturnClass = theClass.CreateType();//创建引用
objReturn = Activator.CreateInstance(ReturnClass);//创建实例化 return objReturn;}
解决方案 »
- Sys.WebForms.PageRequestManagerServerErrorException:......12152
- ImageMap控件无法捕捉到非热点区域的Click事件吗?
- 用ASP.Net(C#+水晶报表) PDF预览打印后如何弹出提示框
- 关于ACCESS连接类的写法问题
- VS2008属性窗口位置问题
- 求问:如何在asp.net中加载类库
- DataGrid 删除某一页最后一条记录时的问题
- +++请问这样一个button的css效果要怎么做出来?++++
- 如何在一个连接中传递两个参数。请大各位帮帮忙(在线等)
- 简单问题,急需一个链接SQL SERVER 2000的字符串!!!
- 麻烦问题:未能找到路径“C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\News\Html\2007\11\20071123173351.html”的一部分。
- |M| Session过期是指某一个Session过期还是指全都的Session一起过期?
真的感激不尽!!