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