【问题标题】:Check if there's a open connection to database asp.net/c#检查是否有与数据库 asp.net/c# 的打开连接#
【发布时间】:2010-01-07 19:40:07
【问题描述】:

每次我的应用程序运行存储过程时,它都会执行以下操作:

using (DbBase conn = new DbBase())
{      
    //call sproc
}

DBBase() 使用 LINQ DataContext 打开连接。

我想知道的是,如果有办法知道连接是否已经打开,并使用它而不是打开新连接。该验证应在 DbBase() 构造函数中完成,如下所示:

ClientDB = new ClientDBDataContext([ConnectionString from web.config]);

谢谢

【问题讨论】:

    标签: c# asp.net database linq


    【解决方案1】:

    您查看任何DBConnection 对象的State 属性,它会告诉您它是否为open, closed, connecting, executing, fetching or broken

    不过,通过使用using{ } 语句,您可以确保在对象超出范围时关闭连接。

    【讨论】:

    • 我希望这个答案提到 using() 实际上并没有关闭连接,而只是将其释放回 ADO.Net 连接池以供重用...
    • @Charles - 在 DbConnection 对象的 Dispose() 期间专门调用 Close 方法。 ADO.Net 将维护池化信息,但对于客户端而言,连接已关闭,这是一件好事。
    【解决方案2】:

    使用连接池(默认设置 - 除非您已明确执行某些操作将其关闭),这不是问题。让连接池代码处理这个问题。然后关闭连接,实际上只是将其释放回池中以供重用。只有当池中没有一个时,才会为您创建(并打开)一个新的。很好,您正在使用using 语句。这样可以确保在完成此代码 sn-p 后,连接将被释放回池以供重用(未关闭)。

    【讨论】:

      【解决方案3】:

      使用using 的好处在于,您无需担心这种类型的事情。

      【讨论】:

      • 我 DV 是因为我认为这不足以解决 OP 在该主题上缺乏知识。只是说“别担心,要开心,using 将解决所有问题……”并不能回答问题或填补 OP 对 ADO.Net 连接池的理解中的空白,而 ADO.Net 连接池是这个问题的核心。
      • @cb:Womp 的回答是最好的,我赞成它来表明这一点。如果我看到它,我就不会发布我快速而肮脏的答案。
      • 我已经改了正确答案,别担心。我实际上知道池化,据我所知,你的回答就足够了,但我必须同意 womp 的更完整。谢谢。
      • @Nick,删除了我的 DV,由于你的慷慨回应...... @Eduardo,仍然认为汇集行为(不使用声明)是你问题实质背后的关键问题(至少你问的方式),但这当然是有争议的......
      【解决方案4】:

      我不会担心它(除非你已经分析过它或其他东西)。使用连接池,打开一个新连接可能非常便宜。如果有问题,那么您可能需要查看更改池中的连接数 (http://www.15seconds.com/issue/040830.htm)

      【讨论】:

      • 感谢您的快速答复。我同意连接池,但我想知道是否有办法。
      【解决方案5】:

      我不了解 DBase,但 Sql Server 提供程序至少已经为您完成了这项工作。它在后台使用连接池来尽可能重用现有连接。

      【讨论】:

      • DbBase 是我创建的一个类,用于管理我们在项目中拥有的数据上下文。谢谢
      猜你喜欢
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多