假设我们正在执行许多不同的sql命令,并且SqlCommand.CommandTimeout
默认值为30秒.
让我们假设一些sql命令只是长查询,我们可能会得到超时异常.
纠正我,如果我错了,这个异常只是因为.Net不想再等了,但是如果我们使用连接池,这个连接可能会保持打开状态,那么sql语句可能仍然在SQL服务器端运行?或者这些系统之间存在一些隐藏的通信,无论我们是否使用连接池,都会突然停止它?
只是想知道什么是机制,它会影响SQL服务器的性能.我的意思是如果查询真的很长,如果它仍在运行需要10分钟才能运行它可能只会减慢服务器的速度,因为没有人能够得到结果.
UPDATE
所以这里我特别询问连接池,它肯定是代码将关闭与异常处理的连接,或者我们可以假设使用的代码是@dash在这里命名的首选模式.问题是如果我在该SqlConnection对象上调用Close()或Dispose()方法,它将返回到连接池,它不会在物理上关闭它.
我问它什么时候返回池,那个长查询仍然在SQL Server端运行.如果可能的话,如何避免这种情况.
再次更新
感谢@dash提到有关数据库事务的问题,是的,回滚将使它等待,我们没有关闭连接并将其返回到池中.那么,如果只是一个长期的选择查询或更新但只是一个单独的更新而不涉及任何数据库事务呢?特别是我想知道有没有一种方法可以告诉SQL Server我现在不需要结果请停止运行它?