SqlConnection vs Sql Session.他们的生命一致吗?

Art*_*dod 12 c# sql sql-server asp.net connection-pooling

我想为我的c#应用程序中的某些进程应用一些sql-session级别设置.

例如,我想DEADLOCK_PRIORITY为一些后台进程设置LOW.

问题是:

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

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

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

谢谢!

usr*_*usr 3

当您从池中sp_reset_connection取出 a 时(在关闭它以便将其返回到池中之后), ADO.NET 就会执行。SqlConnection根据“exec sp_reset_connection”在 Sql Server Profiler 中意味着什么?所有SET选项都将被重置。这将包括DEADLOCK_PRIORITY.

我仍然建议您编写一个小测试程序来确认这一点。ADO.NET 会话池并不完美,例如它不会重置事务ISOLATION LEVEL,也不会在关闭时回滚事务。

  • 注意:(不幸的是?)当从池中*获取*连接时调用“sp_reset_connection”,而不是*释放*连接时调用。这可能会导致两个操作之间出现“奇怪的会话内容”,包括会话 sp_getapplocks 未释放:} (3认同)
  • `SqlConnection` 实际上代表 SQL Server 的一个会话。物理连接由ADO.NET 管理。每当您“打开”“SqlConnection”时,您都会创建一个新会话,而不是一个新连接。所以:1 = 是,2 = 是,3 = 否(但要注意“隔离级别”! - 我认为这是一个错误)。 (2认同)