C# - 从类方法返回的连接泄漏

标签 c# asp.net

我已经从 Connection 类中的类方法返回了一个连接。在我的另一个类中,我实例化连接类以打开连接。我也关闭了连接,但似乎有连接泄漏。知道我该如何解决它。我的代码如下

public class Connection
{
    private SqlConnection _oConn;

    public SqlConnection GetConnection
    {
        get
        {
            if (_oConn == null)
            {
            string sConnString = ConfigurationManager.ConnectionStrings["bplocator_database_connection"].ConnectionString;

                _oConn = new SqlConnection(sConnString);

            }
            return _oConn;
        }          
    }         
}

在另一个类文件中,我调用这个连接类

 private BPAdmin.data.Connection oConn
    {
        get
        {
            if (_oConn == null)
            {
              _oConn = new BPAdmin.data.Connection();
            }
            return _oConn;
        }
    }

public void getData
 {
    try
   {
        oConn.GetConnection.Open();
      //Do something
    }

   catch
      {
          oConn.GetConnection.Close();
      }
   finally
      {
          oConn.GetConnection.Close();
      }
 }

我发现这会导致连接泄漏并导致应用程序池达到最大值。知道出了什么问题以及如何解决它。请帮忙!

最佳答案

你有两个选择

  1. 使用using语句
  2. finally 而不是 Close 中调用 Dispose

两种解决方案都应该可以解决问题。

更新:如何使用using语句

因为 oConn 总是在 getData 中返回一个新对象,您可以使用以下方法:

 public void getData()
 {
   try
   {
       using(var conection=oConn.GetConnection)
       {
             //execute your query
       }

    }
    catch
    {
          //do something to show user an error or just log it
    }
    finally
    {
         //you do not have to close connection because using statement will do this for you
    }
 }

关于C# - 从类方法返回的连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710504/

相关文章:

c# - 如何在 MS WIndows 7 中获取音频设备的插孔信息

c# - 来自奥尔森时区的 .NET TimeZoneInfo

asp.net - asp.net中的HttpContext.Current.User和Thread.CurrentPrincipal有什么区别?

javascript - 使用拖放上传文件

c# - 删除转义序列不起作用

c# - .NET:WebBrowser、WebClient、WebRequest、HTTPWebRequest……啊!

c# - 为什么在比较中使用 IComparable 比使用字符串慢?

asp.net - 每页仅允许一个 'enable_page_level_ads'

asp.net - 切换 asp.net 连接字符串 live/test/dev

c# - GDI+ 中发生一般性错误