asp.net OracleDataReader对象读取数据异常

asp.net OracleDataReader对象使用objReader.GetFloat(index)读取数值类型的数据时,如果遇到数据类型异常,那么整个应用程序就会挂掉。 

测试环境
Microsoft Visual Studio 2008 9.0.30729.1 SP
Microsoft .NET FrameWork 3.5 SP1
Oracle 11g

发生异常时,整个浏览器卡住,查看任务管理器,发现ASP.NET Development Server进程CPU占率达100%,ASP.NET Development  Server还没有挂,证明程序仍在执行中,排除了程序逻辑的问题后,直接在数据读取的那个方法里设置断点,发现OracleDataReader对象读取到一个类型为float的字段时,见以下代码片段:

if (!reader.IsDBNull(8))
{
    item.Weight = reader.GetFloat(8);
}

整个程序就停止不动了,根据以往的经验,可以断定数据库表中的float类型的字段被插入了非法值。直接使用PLSQL查询,果然发现类型float的字段数据记录里存在了一个0值(正常情况下应该是0.0),把这个0删除,再次运行程序,程序正常!原来为表添加了一个字段后,我在页面上更新了一条数据,那个其中一条数据里的类型为float类型Weight字段的值被我删除了,由于同事的那个更新方法里没有判断Weight字段的是否为DBNull值,直接把0插进去了,从而导致了这个结果。

原文http://www.fetso.cn/article/339.html

posted @ 2011-04-07 20:48  Recole  阅读(611)  评论(0编辑  收藏  举报