[已解决问题] 再问关于反射的一个问题
提问时间: 2008-01-20 03:10
悬赏分:5 浏览:464 次

类Company有以下属性
companyName,City...
常规方法赋值: 
companyName= DataView1["companyName"].ToString();
City=DataView1["City"].ToString();

我想定义属性以后使用反射赋值:
 DbDataReader dr = db.ExecuteReader("company");
          Company model = new Company();
          FillModel(model, dr);
可得到的值为空?
属性名称定义的和数据库定义的相同(包括大小写)。相关函数:
 public void FillModel(object targetObj, DbDataReader reader)
      {
          if (!reader.Read()) { return; }
          for (int i = 0; i < reader.FieldCount; i++)
          {
              System.Reflection.PropertyInfo propertyInfo = targetObj.GetType().GetProperty(reader.GetName(i));
              if (propertyInfo != null)
              {
                  if (reader.GetValue(i) != DBNull.Value)
                  {
                      propertyInfo.SetValue(targetObj, reader.GetValue(i), null);
                      System.Web.HttpContext.Current.Response.Write(targetObj.ToString() + ":" + reader.GetValue(i)+"<br>");//注意调用的时候重复输出companyName一个字段,值却是逐个字段的值
                  }
              }
          }
      }

提问者:wdx2008 - 初学一级
所有回答(1)
》》System.Web.HttpContext.Current.Response.Write(targetObj.ToString() + ":" + reader.GetValue(i)+"<br>") 我注意到,你这里使用的是“targetObj.ToString()”。是不是手误? 从你的程序看起来应该是没有问题的了。因此,我猜测,值已经正确的写进去了,只是你的输出语句写的有问题。设断点确认一下吧。
10个月前   回答者:Colin Han - 老鸟四级
评论
10个月前   wdx2008 :
把CompanyName注释掉输出的是类名Compay
这个类是Public的属性也是Public的
10个月前   wdx2008 :
要实现的功能其实很好理解,读取数据,并匹配数据库字段和属性字段,如果相等则把当前数据字段的值赋值给这个属性
10个月前   wdx2008 :
问题找到了,可是还是无法解决
先是忘了reader.Read()
现在就是值可以循环输出,属性始终都是空!
超级郁闷
   您需要登录以后才能回答!
 

我要提问

我的问题


快到期问题



> 问题排行榜

相关内容

相关链接