数据库连接未正确关闭

时间:2017-11-06 11:17:14

标签: sql-server linq-to-sql database-connection

我正在使用C#linq到sql应用程序,我的应用程序在服务器上运行24 * 7。现在我面临问题数据库连接他们没有关闭所以主动连接达到200甚至更多。我在任何地方都使用语法直接处理数据库。

但这不能解决我的问题。请检查并让我知道我能为此做些什么。

提供商始终禁用我的数据库。

using (DataClassesDataContext DbContext = new DataClassesDataContext())
{
  return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
}


using (DataClassesDataContext DbContext = new DataClassesDataContext())
        {
            tblApiLink Apilink = new tblApiLink();
            Apilink.ApiUrl = Url;
            Apilink.ApiKey = Key;
            Apilink.ProviderName = Provider;

            DbContext.tblApiLinks.InsertOnSubmit(Apilink);
            DbContext.SubmitChanges();
        }

新编辑

案例1.请检查这些代码返回表格。这会影响关闭连接吗?

public tblApiLink getData()
{
    using (DataClassesDataContext DbContext = new DataClassesDataContext())
{
  return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
}
}

tblApiLink api =  getData();

案例2.如果我像这样使用tblApiLinks lst = dbContext.tblApiLinks; 我认为这不会关闭连接,它们将一直处于活动状态。

案例3.是否有办法关闭所有长时间未使用的睡眠连接。

1 个答案:

答案 0 :(得分:0)

在“case 1”中尝试设置一个存储要返回内容的变量,并在使用块关闭后返回该值。

示例:

    tblApiLink returnData = null;
    using(DataClassesDataContext DbContext = new DataClassesDataContext())
    {
        returnData = DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
    }
    return returnData;

旁注:类型tblApiLink未根据惯例正确命名,我建议您尽可能重构它。

案例2:我不明白你的意思。

案例3:您可以使用处理连接并关闭它们的单例,但正确的方法是处置不再处于活动状态的连接。如果您真的想杀死活动连接,那么您最好的选择是在服务器上,手动或存储您稍后可以调用的过程。