SqlConnection和Sql Session,它们的生命周期是否相同?

15

我希望在我的c#应用程序中为某些进程应用一些sql-session级别的设置。

例如,我想为某些后台进程设置DEADLOCK_PRIORITYLOW

问题是:

  1. 如果我打开一个新的sql连接,那么这会启动一个新的sql-session吗?

  2. sql-session会一直存在直到连接关闭吗? 如果我在SqlConnection打开后立即应用设置,它们是否对在同一SqlConnection上下文中执行的所有查询有效?

  3. 那什么是连接池? 我的SET DEADLOCK_PRIORITY LOW设置是否可能被系统中的其他进程重复使用(我不想要),因为SqlConnection实际上没有关闭(asp.net连接池决定重用它)。

谢谢!


据我所记,session 将显示外部连接和内部进程,而 connection 仅显示外部连接。 - Brian
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
3
当您从池中获取一个SqlConnection(在关闭它以便返回到池之后),ADO.NET会执行sp_reset_connection。根据在Sql Server Profiler中显示的“exec sp_reset_connection”的含义是什么?,所有SET选项都将被重置,包括DEADLOCK_PRIORITY。 我仍建议您编写一个小测试程序来确认此事。ADO.NET会话池并不完美,例如当关闭时它不会重置ISOLATION LEVEL,并且不会回滚事务。

谢谢!那非常有用。你能回答前两个问题吗?我猜答案对于两个问题都是“是”吧? - Artur Udod
2
SqlConnection 实际上代表了一个针对 SQL Server 的会话,物理连接由 ADO.NET 管理。每当你打开一个 SqlConnection 时,你创建了一个新的会话,而不是一个新的连接。因此: 1 = 是,2 = 是,3 = 不是(但要注意 ISOLATION LEVEL!- 我认为这是一个错误)。 - usr
3
注意:sp_reset_connection 会在从连接池中获取连接时调用(不幸的是?),而不是在释放连接时调用。这可能会导致两个操作之间出现“奇怪的会话问题”,包括未被释放的 Session sp_getapplocks。 :} - user2864740

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,