C# SqlConnection与Sql会话。他们的一生是一致的吗?
我想为我的C# SqlConnection与Sql会话。他们的一生是一致的吗?,c#,asp.net,sql,sql-server,connection-pooling,C#,Asp.net,Sql,Sql Server,Connection Pooling,我想为我的c#应用程序中的某些进程应用一些sql会话级别设置 例如,我想将一些后台进程的死锁\u优先级设置为低 问题是: 如果我打开一个新的sql连接,是否会启动一个新的sql会话 sql会话在连接关闭之前是否有效?如果我在打开SqlConnection后立即应用我的设置,它们是否对在同一SqlConnection上下文中执行的所有查询有效 连接池怎么样?我的SET DEADLOCK\u PRIORITY LOW设置是否可能会被我系统中的其他进程重用(我不想这样做),因为SqlConnectio
c#
应用程序中的某些进程应用一些sql会话级别设置
例如,我想将一些后台进程的死锁\u优先级设置为低
问题是:
如果我打开一个新的sql连接,是否会启动一个新的sql会话
sql会话在连接关闭之前是否有效?如果我在打开SqlConnection
后立即应用我的设置,它们是否对在同一SqlConnection
上下文中执行的所有查询有效
连接池怎么样?我的SET DEADLOCK\u PRIORITY LOW
设置是否可能会被我系统中的其他进程重用(我不想这样做),因为SqlConnection
实际上没有关闭(asp.net连接池决定重用它)
谢谢大家! ADO.NET在从池中获取SqlConnection
时执行sp\u reset\u connection
(在关闭该连接以便将其返回池后)。根据所有设置
选项正在重置。这将包括死锁\u优先级
我仍然建议您编写一个小型测试程序来确认这一点。ADO.NET会话池并不完美,例如,它不会重置隔离级别,也不会在关闭时回滚事务。据我所知,会话将显示外部连接和内部进程,连接将只显示外部连接。谢谢!这是相当有用的。你能同时回答前两个问题吗?我猜这两个问题的答案都是“是”SqlConnection
实际上代表了一个SQLServer会话。物理连接由ADO.NET管理。每当您打开一个SqlConnection
时,您创建的是一个新会话,而不是一个新连接。那么:1=是,2=是,3=否(但是谨防<代码>隔离级别< /代码>!-我认为这是一个bug)。注意:<代码> SPRESETHOLL连接< /代码>(不幸的是)当从池获取连接时,不释放连接。这可能导致两个操作之间出现“奇怪的会话内容”,包括会话sp_getapplocks未被释放:}