asp.net OracleDataReader对象读取数据异常
时间:2011-04-07 来源:Recole
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
相关阅读 更多 +