sql-server – 为什么我的CONTEXT_INFO()为空?

前端之家收集整理的这篇文章主要介绍了sql-server – 为什么我的CONTEXT_INFO()为空?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个方法来设置我的 linq数据上下文.在它返回DC之前,它调用存储过程来设置CONTEXT_INFO值以识别当前用户.

触发器会获取所做的任何更改,并使用此上下文数据写入审核记录.

我注意到我的上下文数据在审计表空白中,所以我写了一个简单的单元测试来逐步完成这个过程,我仍然一无所获.但是,如果我将所有Linq-To-sql语句粘贴到查询窗口中,那么上下文数据就在那里.

查看分析器跟踪,它会在此过程中进行相当多的sp_reset_connection调用.我已经明白这些不应该对CONTEXT_INFO值产生影响.

那么这里发生了什么?

解决方法

执行查询时,Linq to sql DataContext实际上不会保持连接打开,使用查询理解或ExecuteQuery / ExecuteMethod调用,并且CONTEXT_INFO仅存在于单个连接的上下文中.

为了使其工作,您需要在设置context_info之前使用context.Connection.Open()在DataContext上手动打开连接.连接已打开后,连续查询将不会在连接完成后自动关闭连接.

注意 – 技术原因是它在IDbCommand上调用ExecuteReader并设置了CommandBehavior.CloseConnection,除非连接已经打开.如果使用具有相同标志集的sqlCommand / IDbCommand对象,则可以自己查看相同的行为.

编辑 – 我想我还应该指出,如果连接是汇集的,从技术上讲,物理连接始终“打开”,但IDbConnection仍然关闭,这就是导致连接重置的原因.

原文链接:https://www.f2er.com/mssql/76841.html

猜你在找的MsSQL相关文章