数据库连接释放问题引起的“与服务器的连接被重置”

        最近在业务系统中写了个下载文件的接口,供公司的其他工具下载业务系统中的文件。结果在下载文件时发现,文件下载了一部分就无法再下载。系统提示“与服务器的连接被重置” 。有时候甚至不会提示 ,IE的保存进度框会突然消失不见。


        

        一开始以为是C#.NET或者IIS的问题。因为在本机VS2010里调试时没有任何问题,文件能顺利下载。

       因为在服务器上打开IE下载也不行,所以可以排除网络和防火墙问题。

       求助度娘和谷哥了大半天,没有找到任何能解决我问题的方法。

       自己在业务系统中写的调试日志也没起什么作用,出问题的代码位置似乎有些随机性。


       后来看了服务器的系统日志,发现了以下错误:

发生未处理的异常,并已终止进程。

Application ID: /LM/W3SVC/6/ROOT

Process ID: 316

Exception: System.InvalidOperationException

Message: 内部 .Net Framework 数据提供程序错误 1。

StackTrace:    在 System.Data.ProviderBase.DbConnectionInternal.PrePush(Object expectedOwner)
   在 System.Data.ProviderBase.DbConnectionPool.PutObject(DbConnectionInternal obj, Object owningObject)
   在 System.Data.ProviderBase.DbConnectionInternal.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
   在 System.Data.SqlClient.SqlInternalConnection.CloseConnection(DbConnection owningObject, DbConnectionFactory connectionFactory)
   在 System.Data.SqlClient.SqlConnection.Close()
   在 System.Data.SqlClient.SqlConnection.Dispose(Boolean disposing)
   在 System.ComponentModel.Component.Dispose()
   在 BLL.DataConnection.Finalize()

        然后又通过屏蔽不同位置的代码,终于定位到了错误:

ProcedureBLL b = new ProcedureBLL(new DataConnection());
//其他代码……
        正确写法应该为:
using (DataConnection c = new DataConnection())
{
    ProcedureBLL b = new ProcedureBLL(c);
    //其他代码…… 
}   

        这次的问题是由于数据库连接未及时被释放引起的。


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值