C# SQL连接打开异常
我正在做一个项目,到今天为止,一直都很好。但是现在,当我运行它并执行一些不同的C# SQL连接打开异常,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我正在做一个项目,到今天为止,一直都很好。但是现在,当我运行它并执行一些不同的存储过程调用时,它抛出了一个invalidoOperationException,并显示消息连接未关闭。连接的当前状态为打开。 我知道我可以检查一下连接是否已经打开,但是这个代码没有改变(它在版本控制下,没有修改),所以我正在寻找其他可能的解释 SQL中是否存在未被释放的锁?是否有一个我应该注意并杀死的过程 我真的不能发布代码,因为代码太多了,而且它被分割成更小的方法,这使得提取单个项目变得更困难。例如: public
存储过程
调用时,它抛出了一个invalidoOperationException
,并显示消息连接未关闭。连接的当前状态为打开。
我知道我可以检查一下连接是否已经打开,但是这个代码没有改变(它在版本控制下,没有修改),所以我正在寻找其他可能的解释
SQL中是否存在未被释放的锁?是否有一个我应该注意并杀死的过程
我真的不能发布代码,因为代码太多了,而且它被分割成更小的方法,这使得提取单个项目变得更困难。例如:
public SqlConnection Connection
{
get
{
this._connection.Open();
return _connection;
}
}
public IDataReader RetrieveRecord(int Id)
{
//SP
SqlCommand cmd = this.Connection.CreateCommand();
cmd.CommandText = "SelectRecord";
cmd.CommandType = CommandType.StoredProcedure;
//Parameters
cmd.Parameters.Add(new SqlParameter("@tID", Id));
//instruct the data reader to close its connection when its Close method is called by passing the CommandBehavior.CloseConnection
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
没有什么太复杂的,我只是不明白为什么这个连接现在抛出异常。问题在于线路
this._connection.Open();
因为您正试图打开一个已打开的连接
在打开连接之前,请尝试进行以下检查:
if (this._connection.State == ConnectionState.Closed)
this._connection.Open();
分类。两次重新启动清除了保持连接打开的所有内容。DAL不够稳定:
如果RetrieveRecord中出现问题,您将打开一个未关闭的连接
您应该在RetrieveRecord中创建一个新连接,并在finally块中关闭它
多亏了连接池,打开连接的成本很低。当你们谈论终止过程时,我想你们对c#很了解
你应该始终使用
using()
{
}
比如:
using(SqlConnection con=new SqlConnection("connectionString"))
{
// Do something with con
using(SqlCommand cmd=new SqlCommand("cmdText",con))
{
// Do something with cmd
}
}
您知道SqlCommand和SqlConnection实现了IDisposable
因此,当您使用
将这些对象放入中时,连接关闭和清理工作将自动完成
无需在代码中手动关闭连接,因为使用将为您完成工作。您正在公共SqlConnection connection()函数中打开连接,但从未在程序中关闭。Yep我知道,正如我在原始帖子中所说,但是考虑到类没有改变,并且已经运行了好几个月了,我正在寻找锁的任何其他潜在原因。我仍然会考虑重构代码,以便很好地关闭连接。我100%同意。问题在于,几乎总是这样,让项目经理相信花时间重新编写技术上可行的东西是值得的。了解这种感觉。然而,在遇到这个问题后,你可能有理由说服他。无论如何,祝你好运!;-)