日期:2014-05-17  浏览次数:20839 次

.net问题求教
如图:



我查询的数据返回到dataTable里,是空的,没数据,然后下面的判断中的count却是1,进入else里了,导致else代码报错:无数据无法转换。
求教是什么原因,明明查出没数据为什么count却是1。

------解决方案--------------------
缓存了吧,重新生成解决方案试试.

如果不好使就证明dataTable确实有数据.转换失败的原因可能是数据值是空的.如果用dataTable直接获取数据库,那么数据库查询出来的数据如果是null,那么在dataTable中不会是null而是空字符串,也就是"".那么你将""转换成int就会出错了.

你可以用int.TryParse这个函数试一下,有两个参数第一参数是要转换的字符串类型,第二个参数是个out类型的.也就是输出转换后的int值,返回值是个布尔型,返回是否转换成功.

//例如
int ai;
if(int.TryParse("6",out ai))
{
     ai++;
}
------解决方案--------------------
看你截图里面是有一行吧?只是这一行里面的数据是空的,但是对于DataTable来说是有一行的
------解决方案--------------------
在sql查询其中跑你的sql语句,肯定是有一行返回的,只不说字段值为空
------解决方案--------------------
你这个明显是有一行,但是第一行单元格里面的值都是空的,或者都是空格。

要不然你那里就不会暴转换失败了,而会出现“空引用”或者“未将对象引用到示例”等其他问题。
------解决方案--------------------
count(*) 返回是0,不等于一行没有.

你这样,你建一个临时表,只有一个字段,你插入20条NULL,然后你在用count(*)查询你一下,你看看返回是不是0,这是sql的机制,count函数只计算有数据的行数,并不计算空数据的行数.

很简单的办法就是,在where条件后面加上一句,"字段 is not null" 就可以了啊.

如果null对你有意义,那么就不能加那个where条件了.那么我们就需要知道空行和空数据的区别了.如果你数据库什么都没有查询到,那么datatable是会被实例化的,但是datatable的rows.count的值是0,如果查询的结果是有数据,但是这个数据是个null值,那么datatable中获得是一个空字符串,但是rows的count是1,因为datatable中确实有一行数据,只不过这行数据的值是个null值.
------解决方案--------------------
不是没有数据,而是有一行空数据