维护一个别人留下的一个系统,现在需求有所变化,查询条件更改了,需要新的存储过程,使用listview呈现数据,datasource作为数据源,只 是更改了select委托的方法,当然还有SelectCount委托,但是一切都准备妥当,却没有数据,存储过程在数据库上执行是有数据的,相同的条 件,跟踪调试 select委托的方法的返回也是正常的,怎么没数据呢,在跟踪一下SelectCount方法,返回为空。再看一下原来的代码,发现了原 因,Dal中获取结果集和获取总的记录数量使用不同的存储过程,而我是使用的相同的存储过程,用datareader来读取结果,虽然存储过程中已经声明了output型的参数,但是结果中为null,后来网上搜索发现了原因,datareader是只读的向前的方式,他每次只能获取一个表的结果,二总记录数和结果集显然是不同的结构,肯定不能用datareader来一次获得这两个结果。昨天调了两个小时没有找到原因。一开始有个异常就是返回记录数的转换为(ConvertoInt)int时抛出null异常,我没有注意就用tryparse来做。当时没有引起注意,妄花了我两个多小时做无用功。遇到这种情况要么使用dataset,要么用两个存储过程。
还有就是listview绑定datasource,绑定数据不需要显示的调用Select()。