OleDbDataReader的Read返回值怎么乱七八糟的,不会是.net的bug吧,麻烦各位指点一下(C#)
用Access数据库,字段类型是String时,
select max(dept_name) from dept_data where left(dept_name,3)='abc'
由于没有满足where left(dept_name,3)='abc'所以DataReader没有任何记录,结果执行Read()居然也返回True,但用GetString(0)时,却又出错,有记录时就可以用GetString(0)返回正确结果。当字段类型是integer时就奇怪了,
select max(dept_num) from dept_data
Table的记录是空的时Read()返回False,Table记录不为空时max()有正确的数字结果时Read()也返回False,更不用说GetInt64(0)不可能执行了
select max(dept_name) from dept_data where left(dept_name,3)='abc'
由于没有满足where left(dept_name,3)='abc'所以DataReader没有任何记录,结果执行Read()居然也返回True,但用GetString(0)时,却又出错,有记录时就可以用GetString(0)返回正确结果。当字段类型是integer时就奇怪了,
select max(dept_num) from dept_data
Table的记录是空的时Read()返回False,Table记录不为空时max()有正确的数字结果时Read()也返回False,更不用说GetInt64(0)不可能执行了
...全文
请发表友善的回复…
发表回复
kuangxiang007 2003-10-18
- 打赏
- 举报
还是思归大哥厉害,一下就解决了
xxdneu 2003-10-18
- 打赏
- 举报
用了聚合函数max,就有肯定有记录,只是返回值是Convert.DbNull,所以GetString会出错
Nicholasqpl 2003-10-18
- 打赏
- 举报
代码贴出来
up
up
saucer 2003-10-18
- 打赏
- 举报
look at the datatype for the return value (could be Decimal) or do a specific conversion
DataReader.Read();
Response.Write(DataReader[0] == DBNull.Value);
Response.Write(DataReader[0].GetType().Name);
Response.Write(Convert.ToDecimal(DataReader[0]));
Response.Write(Convert.ToDecimal(DataReader[0].ToString()));
DataReader.Read();
Response.Write(DataReader[0] == DBNull.Value);
Response.Write(DataReader[0].GetType().Name);
Response.Write(Convert.ToDecimal(DataReader[0]));
Response.Write(Convert.ToDecimal(DataReader[0].ToString()));
rgbcn 2003-10-18
- 打赏
- 举报
跟踪一下,看看,会不会出什么错。
Inyoureyes 2003-10-18
- 打赏
- 举报
代码贴出来看看,是不是没有重新生成DataReader,看着都像用的以前的结果