Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 强制在指定的持续时间内打开SqlConnection_.net_Sqlconnection_Lifetime - Fatal编程技术网

.net 强制在指定的持续时间内打开SqlConnection

.net 强制在指定的持续时间内打开SqlConnection,.net,sqlconnection,lifetime,.net,Sqlconnection,Lifetime,SqlConnections似乎在一段时间的不活动后关闭。我需要能够控制连接保持打开的时间。可以为连接配置“连接超时”和“连接生存期”属性,但它们不满足我的需要 问题是,我们的应用程序非常庞大,在很多地方,当某些屏幕打开时,连接不会关闭。用户可以打开一个屏幕,然后去吃午饭,然后回来,然后尝试做一些事情,并得到一个“连接已丢失”异常。我知道这是一种反模式,但就目前而言,在一个地方延长连接生存期,然后在数千个地方打开/关闭和共享连接会更容易。你的应用程序设计得非常错误。连接打开的时间不应超过单个查询

SqlConnections似乎在一段时间的不活动后关闭。我需要能够控制连接保持打开的时间。可以为连接配置“连接超时”和“连接生存期”属性,但它们不满足我的需要


问题是,我们的应用程序非常庞大,在很多地方,当某些屏幕打开时,连接不会关闭。用户可以打开一个屏幕,然后去吃午饭,然后回来,然后尝试做一些事情,并得到一个“连接已丢失”异常。我知道这是一种反模式,但就目前而言,在一个地方延长连接生存期,然后在数千个地方打开/关闭和共享连接会更容易。

你的应用程序设计得非常错误。连接打开的时间不应超过单个查询集(即单个操作所需的查询)的时间。不要担心,因为SqlConnection在内部根据连接字符串池连接,所以没有性能问题。因此,即使您打开和关闭一个连接,真正的连接也会保持打开状态一段时间

更重要的是,在内部,如果连接已关闭,那么池程序将在需要时重新打开它,因此您不必担心它

说真的,只要在使用时打开和关闭你的连接就可以了。这就是它的工作原理


仅供参考,连接关闭的原因是内部连接池将“回收”已打开很长时间的连接。因此,保持连接打开所做的工作就是对抗连接池。

连接不会自动关闭。有些东西失败了,比如网络

不过,这是意料之中的。不要保持连接打开!你正在反对系统的使用方式,你会因此而受苦


更改应用程序,使其在每个工作单元中使用一个连接,然后将其关闭。作为一个创可贴解决方案,在执行查询之前,请确保<代码> SqLoNo.St/<代码>是代码>打开/代码>。

< P>这不是很好的编程来打开连接这么长时间。在需要时打开连接,在数据库任务完成后关闭连接。如果您觉得这会影响应用程序的性能,请使用连接池

解决方法是修复应用程序,使其在使用连接后关闭连接。您要查找的内容不存在-连接超时是唯一的其他选项。@usr-很好,我指的是一个逻辑操作,可以包含多个查询。实际上,连接池程序将在一段时间后回收打开的连接。只有当您通过关闭@MystereMan将其返回池中时,才能查看@MystereMan。只要您保持SqlConnection对象处于打开状态,就不会有人从您下方关闭它。那太可怕了!它将不可预测地中止事务。它可能会将失败注入任何查询,并导致可用性问题。这可能是可怕的和不可预测的,但事实就是如此。阅读我发给你的链接。“连接池程序定期扫描连接池,查找未通过Close或Dispose关闭的未使用连接,并回收找到的连接。”以及连接池在连接空闲了很长一段时间后,或者如果连接池检测到与服务器的连接已断开,则连接池将从池中删除连接。“如果应用程序删除了对SqlConnection对象的最后一个引用,它将回收连接。只要应用程序持有对它的引用,它就不会被GC’ed,框架也不会回收连接。在它被GC’ed之后,它当然是被回收的,因为其他任何东西都可能是资源泄漏。但这不会破坏应用程序,因为应用程序不再知道连接。它故意放弃了它(即使它应该先处理掉它)。您混淆了池连接和SqlConnection。不,SqlConnection未回收,物理数据库连接已回收。SqlConnection使用由连接池管理的连接池集。谢谢,cap。我在问题中也说过同样的话。