在 .NET C# 中不能 set/get SQL session_context
Cannot set/get SQL session_context in .NET C#
我几个月前就开始工作了,但我无法读回会话变量集
在代码中,但我可以在查询分析器中..
此 C# 代码设置变量
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);
它返回 null 但我可以在 management studio 中设置和读取它没有问题
EXEC sys.sp_set_session_context @key = N'TENANTID', @value = 'TEST_ID'
select SESSION_CONTEXT(N'TENANTID')
知道为什么吗?
您正在使用 SPSDatabaseInfo.ExecuteScalar 方法发送连接字符串而不是打开的 SQLConnection,该方法在内部是 creating/opening/closing 它自己的连接。
这意味着您的通话 运行 在不同的会话下。
使用相同连接的 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);
}
我几个月前就开始工作了,但我无法读回会话变量集 在代码中,但我可以在查询分析器中.. 此 C# 代码设置变量
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);
它返回 null 但我可以在 management studio 中设置和读取它没有问题
EXEC sys.sp_set_session_context @key = N'TENANTID', @value = 'TEST_ID'
select SESSION_CONTEXT(N'TENANTID')
知道为什么吗?
您正在使用 SPSDatabaseInfo.ExecuteScalar 方法发送连接字符串而不是打开的 SQLConnection,该方法在内部是 creating/opening/closing 它自己的连接。
这意味着您的通话 运行 在不同的会话下。
使用相同连接的 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);
}