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%同意。问题在于,几乎总是这样,让项目经理相信花时间重新编写技术上可行的东西是值得的。了解这种感觉。然而,在遇到这个问题后,你可能有理由说服他。无论如何,祝你好运!;-)