C# 检查是否存在';s与数据库asp.net/c的开放连接#
每次我的应用程序运行存储过程时,它都会执行以下操作:C# 检查是否存在';s与数据库asp.net/c的开放连接#,c#,asp.net,database,linq,C#,Asp.net,Database,Linq,每次我的应用程序运行存储过程时,它都会执行以下操作: using (DbBase conn = new DbBase()) { //call sproc } ClientDB = new ClientDBDataContext([ConnectionString from web.config]); DBBase()打开与LINQDataContext的连接 我想知道的是,如果有一种方法可以知道一个连接是否已经打开,并使用它来代替打开一个新连接。该验证应在如下所示的DbB
using (DbBase conn = new DbBase())
{
//call sproc
}
ClientDB = new ClientDBDataContext([ConnectionString from web.config]);
DBBase()
打开与LINQDataContext的连接
我想知道的是,如果有一种方法可以知道一个连接是否已经打开,并使用它来代替打开一个新连接。该验证应在如下所示的DbBase()
构造函数中完成:
using (DbBase conn = new DbBase())
{
//call sproc
}
ClientDB = new ClientDBDataContext([ConnectionString from web.config]);
谢谢你我不会担心的(除非你对它进行了分析或其他什么)。使用连接池,打开一个新连接可能非常便宜。如果出现问题,那么您可能需要查看更改池中的连接数()您可以查看任何DBConnection
对象的属性,它会告诉您它是否正确
但是,通过使用using{}
语句,可以保证当对象超出范围时,连接会被关闭。使用的好处是,这是一种您不需要担心的事情 我不知道DBase,但Sql Server提供程序至少已经为您完成了这项工作。它在后台使用连接池在可能的情况下重用现有连接。有了连接池(默认设置-除非您已明确关闭连接池),这不是问题。让连接池代码来处理这个问题。然后关闭连接,实际上只会将其释放回要重用的池。只有当池中没有池时,才会为您创建(并打开)一个新池。很好,您正在使用using
语句。这将确保连接将被释放回池中以供重用(而不是关闭),因为此代码段已完成。感谢您的快速回答。我同意连接池的说法,但我想知道是否有办法,因为我认为这不足以解决OPs缺乏这方面知识的问题。仅仅说“别担心,开心点,使用
将解决所有问题…”并不能回答这个问题,也不能填补OPs对ADO.Net连接池的理解中的空白,这是这个问题的核心。@cb:Womp的答案是最好的,我投了更高的票来表明这一点。如果我看到了,我就不会发布我快速而肮脏的答案。我已经更改了正确的答案,别担心。据我所知,我实际上知道池,你们的答案是足够的,但我必须同意,womp的更完整。谢谢你。@Nick,删除了我的DV,由于你的热情回应@Eduardo,仍然认为池行为(不使用statement)是你问题实质背后的关键问题(至少是你问的方式),但这肯定是有争议的…DbBase是我创建的一个类,它管理我们在项目中拥有的数据上下文。谢谢,我希望答案提到,使用()实际上并不会关闭连接,而只是在ADO.Net连接池中将其释放回以重新使用…@Charles-close方法是在DbConnection对象的Dispose()期间专门调用的。Net将维护池信息,但就客户端而言,连接是关闭的,这是一件好事。