似乎 SqlConnections 在一段时间不活动后关闭。我需要能够控制连接保持打开的时间。可以为连接配置“连接超时”和“连接生命周期”属性,但它们不能满足我的需要。
问题是我们的应用程序很大,并且在很多地方,当某些屏幕打开时连接不会关闭。用户可以打开一个屏幕,然后去吃午饭,然后回来,然后尝试做某事并得到“连接已丢失”异常。我知道这是一种反模式,但现在在一个地方延长连接寿命会更容易,然后在数千个地方打开/关闭和池连接。
似乎 SqlConnections 在一段时间不活动后关闭。我需要能够控制连接保持打开的时间。可以为连接配置“连接超时”和“连接生命周期”属性,但它们不能满足我的需要。
问题是我们的应用程序很大,并且在很多地方,当某些屏幕打开时连接不会关闭。用户可以打开一个屏幕,然后去吃午饭,然后回来,然后尝试做某事并得到“连接已丢失”异常。我知道这是一种反模式,但现在在一个地方延长连接寿命会更容易,然后在数千个地方打开/关闭和池连接。
连接不会自动关闭。出现故障,例如网络。
不过,这是意料之中的。不要保持连接打开!你正在反对系统的使用方式,你会为此受苦。
更改应用程序,使其每个工作单元使用一个连接,然后关闭它。作为创可贴修复,请确保SqlConnection.State
在Open
执行查询之前。
你在设计你的应用程序时非常错误。连接的打开状态不应超过一组查询(即单个操作所需的查询)。不用担心,没有性能问题,因为 SqlConnection 基于连接字符串在内部池连接。因此,即使您打开和关闭连接,REAL 连接也会在一段时间内保持打开状态。
更重要的是,在内部,如果连接被关闭,那么pooler会在需要的时候重新打开它,所以你不必担心。
说真的,只需在使用时打开和关闭连接。这就是它应该如何工作的方式。
仅供参考,连接关闭的原因是内部连接池将“回收”已打开很长时间的连接。所以你通过保持连接打开所做的就是与连接池对抗。
这么长时间打开连接不是很好的编程。在需要时打开连接并在完成数据库任务后关闭。如果您觉得它会影响您的应用程序性能,请使用连接池