private InstStars PopulateInstStarsFromIDataReader(IDataReader dr)
{
InstStars inst = new InstStars(); inst.Id = (int)dr["id"];
inst.StarsName = (string)dr["StarsName"];
inst.Sex = (string)dr["sex"];
inst.Field = (string)dr["field"];
inst.Pinyin = (string)dr["pinyin"];
inst.BiHua = (int)dr["bihua"];
inst.CreateTime = (string)dr["createtime"];

return inst;
}这个代码怎么能提高一下兼容性,比如dr里根本不存在pinyin字段,能忽略这个字段的数据就好了,因为多个存储过程里返回不同的字段列表 ,我又不想返回所有字段,因为那会降低效率

解决方案 »

  1.   

    加个if
    推荐使用codesmith........
      

  2.   

    我的意思是,比如有两个函数A和B,A是用来列表用的,只需要取出ID,StarsName两个字段就可以了,B函数是显示详细信息用的,那就需要显示所有字段,我想让这两个函数的从数据库记录到实体转换的时候都用上面的PopulateInstStarsFromIDataReader函数实现
      

  3.   

    我在用codesmith啊,就是不太会用现在的代码:
    private InstStars PopulateInstStarsFromIDataReader(IDataReader dr)
    {
    InstStars inst = new InstStars(); inst.Id = (int)dr["id"];
    inst.StarsName = (string)dr["StarsName"];
    inst.Sex = (string)dr["sex"];
    inst.Field = (string)dr["field"];
    try
    {
    inst.Pinyin = (string)dr["pinyin"];
    }
    catch{}
    try
    {
    inst.BiHua = (int)dr["bihua"];
    }
    catch{}
    inst.CreateTime = (string)dr["createtime"];

    return inst;
    }
    可是看上去实在不美观
      

  4.   


    CSDN上的问题看过了,我平时做的项目也是用这种方式的,也有这个问题,我设计的时候加了个LoadQuery类,它里面把一些可能会变的字段用个bool表示,然后在加载的时候,先把一些公共的字段加进去,然后调用LoadByQuery方法,里面用if来判断是否需要加载,
    然后外面调用加IDataReader的方法时,先实例一个LoadQuery类,把需要加载的字段放在里面设为true,然后把它和IDataReader一起传入,
    但这个方法对变化字段很多的可能不是很好,不要用try,这个很费资源
      

  5.   

    to sp1234:可能是我用词不够准确,能否详细赐教如何实现?
      

  6.   

    我建了一个存储过程传表名返回记录集,我用了一个没有架构的dataset,不管多少个字段的记录集都能被正常填充,去绑定控件。不知道是不是你要求的。