奇怪的IndexOutOfRangeException

不知道从什么时候开始,WebApplication 开始出现 IndexOutOfRangeException,也不是频繁出现,而是偶尔发生这种异常,真是奇怪。

Exception information: 
Exception type: IndexOutOfRangeException 
Exception message: 索引超出了数组界限。 
Stack trace:    在 
System.Data.SqlClient.SqlDataReader.ReadColumn(Int32 i, Boolean setTimeout)
   在 System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
   在 System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
   在 System.Data.SqlClient.SqlDataReader.get_Item(Int32 i)
   在 dazaza.info.GetUserInfo(String name)

出现这种异常一般是因为 DataReader 没有读取到数据库中对应的列,但这里肯定不是这个原因引起的,因为提取数据库的 SQL 语句中是确信没有错误的,先前很长一段时间以来,程序运转非常正常,此后代码基本上没有修改,只是做了一些 Cache 功能,关键是,这个 IndexOutOfRangeException 异常是偶尔发生,而且一旦发生后,就会产生连锁效应,其它一些 DataReader 也跟着引发异常,甚至导致 IIS 的瘫痪!


引发异常的代码片段如下:

 using (System.Data.SqlClient.SqlDataReader drUser = new DataAccess.User().GetAUserFromView(Name))
{
    if (dr.HasRows == false)
    {
          throw new Exception("#by cacard:dr.HasRows==false : "+dr.FieldCount.ToString());
          //这里偶尔抛出异常,dr 没有 HasRows,但其 FieldCount 却是正确的
    }
   else(drUser.Read())
   {
         blog = drUser[0].ToString();
         //异常就在这里发生
   }
}

Google 了一下这个问题,原来老外被这个问题困了 2 年多了,具体请看这个链接,他们讨论了一大堆也没有找到原因和很好的解决方案,原因可能是:WebApplication 的访问量比较大,数据库 Pooling 存在问题,数据访问层使用了静态方法,ADO.NET 本身存在缺陷,或者 .NET 内存分配的问题。可尝试一下这些解决办法,过一段时间重启 IIS,关闭 Pooling,数据访问层不要使用静态方法,但问题依然存在。

转载于:https://www.cnblogs.com/caca/archive/2008/04/03/1136815.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值