您的位置:首页 > 数据库

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

2013-07-18 14:54 260 查看
        最近在业务系统中写了个下载文件的接口,供公司的其他工具下载业务系统中的文件。结果在下载文件时发现,文件下载了一部分就无法再下载。系统提示“与服务器的连接被重置” 。有时候甚至不会提示 ,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);
//其他代码……
}


        这次的问题是由于数据库连接未及时被释放引起的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐