C# 无法在.NET C中设置/获取SQL会话上下文#
几个月前我就已经开始工作了,但是我无法读回会话变量集 在代码中,但我可以在查询分析器中。。 此C代码设置变量C# 无法在.NET C中设置/获取SQL会话上下文#,c#,sql-server,sessioncontext,C#,Sql Server,Sessioncontext,几个月前我就已经开始工作了,但是我无法读回会话变量集 在代码中,但我可以在查询分析器中。。 此C代码设置变量 String.Format("EXEC sp_set_session_context N'TENANTID', '{0}'", tenantId); SPSDatabaseInfo.ExecuteScalar(SPSDatabaseInfo.DBType.MSSQLServer, _connString, sql, null); 但是当我读到它的时候,马上 sql = "select
String.Format("EXEC sp_set_session_context N'TENANTID', '{0}'", tenantId);
SPSDatabaseInfo.ExecuteScalar(SPSDatabaseInfo.DBType.MSSQLServer, _connString, sql, null);
但是当我读到它的时候,马上
sql = "select SESSION_CONTEXT(N'TENANTID') AS SESSION_ID";
var retVal = SPSDatabaseInfo.ExecuteScalar(SPSDatabaseInfo.DBType.MSSQLServer, _connString, sql, null);
它返回空值,但我可以在management studio中设置并读取它,没有问题
EXEC sys.sp_set_session_context @key = N'TENANTID', @value = 'TEST_ID'
select SESSION_CONTEXT(N'TENANTID')
知道为什么吗?您正在使用SPSDatabaseInfo.ExecuteScalar方法发送连接字符串而不是打开的SQLConnection,该方法在内部创建/打开/关闭自己的连接 这意味着您的呼叫在不同会话下运行 对两个查询使用相同的连接,使用ExecuteScalar方法的此重载
public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
{
//pass through the call providing null for the set of SqlParameters
return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);
}
这边
using (SqlConnection cn = new SqlConnection(_connString))
{
cn.Open();
String.Format("EXEC sp_set_session_context N'TENANTID', '{0}'", tenantId);
SPSDatabaseInfo.ExecuteScalar(cn, CommandType.Text, sql);
sql = "select SESSION_CONTEXT(N'TENANTID') AS SESSION_ID";
var retVal = SPSDatabaseInfo.ExecuteScalar(cn, CommandType.Text, sql);
}
SPSDatabaseInfo
是如何实现的?如果不知道sp\u set\u session\u context
是如何工作的,或者这两个命令是如何执行的,以及何时执行,@cyridurand执行标量是对Microsoft.ApplicationBlocks.Data.SqlHelper的包装,那么它就帮不上忙了functions@mxmissile-会话上下文为标准sql2016及以上版本功能性感谢@Daniel Brughera-事实上,这就是问题所在!:)