一个方法返回DataSet问题

cow8063 2009-07-26 12:58:25
我用MS那个什么Duwamish,搞了个东西,定义了一个类继承DataSet,这个类一个表对应一个,一共有几十个

public class t_b_SysUserData : DataSet
{
public const String T_B_SYSUSER_TABLE = "t_b_SysUser";
public const String ADMINID_FILED = "AdminID";
public const String USENAME_FILED = "UseName";
public const String PSW_FILED = "PSW";
public const String ROLEID_ID = "RoleID";

public t_b_SysUserData()
{
BuildDataTable();
}
private void BuildDataTable()
{
DataTable dt = new DataTable(T_B_SYSUSER_TABLE);
DataColumnCollection dcc = dt.Columns;
DataColumn dc = dcc.Add(ADMINID_FILED, typeof(System.Int32));
dcc.Add(USENAME_FILED, typeof(System.String));
dcc.Add(PSW_FILED, typeof(System.String));
dcc.Add(ROLEID_ID, typeof(System.String));

this.Tables.Add(dt);
}
}


又定义了 一个通用的分页过程,调用存储过程
        public static DataSet GetPage(string sTableName, string sFields, string sOrderField, string sSqlWhere, int iPageSize, int iPageIndex, out int TotalPage)

{
DataSet ds = new DataSet();
。。。。。。。。。。
dar.Fill(ds);
return ds;

}


然后在数据操作调用此过程

        public t_b_SysUserData GetAllSysUserInfo(string sSqlWhere, int iPageSize, int iPageIndex,out int TotalPage)
{
return (t_b_SysUserData)BaseClass.ConnectionInfo.GetPage("t_b_SysUser", "*", "AdminID", sSqlWhere, iPageSize, iPageIndex, out TotalPage);
}



问题就来了,由于我最终要返回的是具体自己定义的t_b_SysUserData类型,继承自DataSet,上面的方法提示不能强制转换,
如果我在通用的分页过程返回的是自定义t_b_SysUserData,面不是DataSet就不用转换,成功。
但问题是自定义的几十上百个,这样就要写上百个,失去意义了呀

应该怎么办呢。是不是泛型可解决,高手指点指点
...全文
174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cow8063 2009-07-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 mbh0210 的回复:]
楼主可以用扩展方法,给DataSet增加转换t_b_SysUserData的方法,

public static class ExDataSet
    {
        public static  t_b_SysUserData ToSysUserData(this DataSet ds)
        {
            t_b_SysUserData t_b_SysUserData = new t_b_SysUserData();
            //你的转换
            return  t_b_SysUserData;
        }
    }

使用:DataSet ds = new DataSet();
            ds.ToSysUserData();
[/Quote]
不好意思,有点不懂转换。。。。。
slund 2009-07-27
  • 打赏
  • 举报
回复
反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
mbh0210 2009-07-27
  • 打赏
  • 举报
回复
楼主可以用扩展方法,给DataSet增加转换t_b_SysUserData的方法,

public static class ExDataSet
{
public static t_b_SysUserData ToSysUserData(this DataSet ds)
{
t_b_SysUserData t_b_SysUserData = new t_b_SysUserData();
//你的转换
return t_b_SysUserData;
}
}

使用:DataSet ds = new DataSet();
ds.ToSysUserData();
cow8063 2009-07-27
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fengjian_428 的回复:]
4l就是代码了 更详细的可以到网上去搜索 资料很多的
PS:把dataset的信息传给SysUserData 对象是否可以实现? 如果可以实现用反射就没问题
[/Quote]

汗,可否实现我也不知道,反射实例化后如何引用 ,如何把dataset的信息传给SysUserData 对象

其实我都没思路。。。
hackervip1988 2009-07-26
  • 打赏
  • 举报
回复
搞这么久还没用过反射 惭愧
不会
dongjianhua520520 2009-07-26
  • 打赏
  • 举报
回复
新手,路过学习下。
惜分飞 2009-07-26
  • 打赏
  • 举报
回复
如果多张表,返回dataset
一张表就直接返回datatable就可以了啊
fengjian_428 2009-07-26
  • 打赏
  • 举报
回复
4l就是代码了 更详细的可以到网上去搜索 资料很多的
PS:把dataset的信息传给SysUserData 对象是否可以实现? 如果可以实现用反射就没问题
cow8063 2009-07-26
  • 打赏
  • 举报
回复
可否详细点呀。本人对反射一点不懂,最好给点代码。。
xiaodru 2009-07-26
  • 打赏
  • 举报
回复
用DATASET就OK拉
fengjian_428 2009-07-26
  • 打赏
  • 举报
回复
Assembly.Load("AssemblyName").CreateInstance ("ClassName");
//AssemblyName:程序集名称
//ClassName类的完全限定名(即包括命名空间)
cow8063 2009-07-26
  • 打赏
  • 举报
回复
改成DataTable不符合Duwamish的框架,好像很多地方都要改,有麻烦


反射怎么写呀,不会呀,呵
fengjian_428 2009-07-26
  • 打赏
  • 举报
回复
是不是可以在GetAllSysUserInfo方法中应用反射实例化一个t_b_SysUserData 然后再把dataset的信息传给SysUserData 对象
老郭20130824 2009-07-26
  • 打赏
  • 举报
回复
第1个办法:不用DataSet,全部用DataTable,分页存储过程也返回DataTable,直接对其进行操作

第2个办法:修改BuidDataTable函数,将一个分页函数出来的大的DataTable分解成你想要的多个DataTable,比如:
DataTable dt = BaseClass.ConnectionInfo.GetPage("t_b.......//假设这个返回DataTable
t_b_SysUserData.BuildDataTable(dt)//分解

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧