本想为这篇博文取一个隐喻的名字,因为我下面要说明的错误也是隐藏得很深的错误。
废话少说,贴图为证:
很明显,DataReader对象dr已经获得了内容。此时“IsClosed”为false,也就是说,阅读器未关闭,DataReader中的内容是可读取的。但紧接着,如下图:
IsClosed值为true,且报了“阅读器关闭时尝试调用无效”。为什么呢?我疑惑了好久,准确地说,是被折磨了两天。最终,还是姜sir手把手帮我解决了:(
我的dr是通过DBHelper封装的一个方法获得的,通过调试发现,在dr.Read()之前,dr就报错了。于是,怀疑是DBhelper的问题,可是DBHelper是基于微软企业库的,so,有问题的可能性不大。这时,发现model居然没有初始化!ooh~我彻底崩溃!(一直以为是DataReader的问题,盲目在网上找答案。网上的解决方案大都是“关闭连接”、“关闭DataReader”之类,可我的DataReader是直接通过DBHelper得到的,so,有点被层层封装的方法弄得不知所以然。)
弄了半天,原来不是dr的问题,而是model没有初始化~
至于阅读器关闭,因为刚刚是在调试状态的监视里展开了某些属性,调试器的计算导致了dr关闭。~汗死~
随后,运行居然又跳出“IndexOutOfRangeException”的异常。我看着有点莫名,因为之前运行是OK的(我仅获得dr中的CId),现在我想获得TId,却不行了?!CId和TId是同一类型,且在数据库中均定义为非空,为啥CId能获得,TId却不行嘞?
姜sir一眼就看出来――原来,我dr["TId "]多了一个空格!!!再汗一次~
ok,我也牢牢记住了,IndexOutOfRangeException表示“查无此人”!
HoHo~折磨了我两天的问题,就这样解决了。
在感叹自己太嫩之后,还是把这次犯的小白错误记录下来。
--------菜鸟起飞,小马过河,啦啦啦啦,加油加油~