gpt4 book ai didi

具有 SQL Server 应用程序角色的 C# : Cannot continue the execution because the session is in the kill state

转载 作者:行者123 更新时间:2023-11-30 15:51:19 25 4
gpt4 key购买 nike

我正在尝试使用我在 C# Winforms 桌面应用程序中的连接来实现应用程序角色。第一次连接时一切正常,我正在使用 using{} 构造正确关闭它。但是,当我创建第二个连接时,出现“无法继续执行,因为 session 处于终止状态”错误。关于为什么我会收到此错误以及如何排除故障的任何想法?这是我在设置应用程序角色的方法中遇到错误的代码:

try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
oAppRole.setApplicationRole(connection);

string query = "<sql statement here>";

using (var cmd = new SqlCommand(query, connection))
{
cmd.Parameters.AddWithValue("@EmpID", empID);
cmd.Parameters.AddWithValue("@ExpDate", priorExpDate);

SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dtReturnTable);
}
}
}
catch (Exception ex)
{
throw ex;
}

public bool setApplicationRole(SqlConnection connection)
{
bool retVal = true;
string procName = "sys.sp_setapprole";

SqlCommand cmd = new SqlCommand(procName);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Connection = connection;

// Parameter for Application Role Name
SqlParameter parmAppRoleName = new SqlParameter();
parmAppRoleName.ParameterName = "@rolename";
parmAppRoleName.Value = "myAppRole";
cmd.Parameters.Add(parmAppRoleName);

// Parameter for Application Role Password
SqlParameter parmAppRolePwd = new SqlParameter();
parmAppRolePwd.ParameterName = "@password";
parmAppRolePwd.Value = "myPassword";
cmd.Parameters.Add(parmAppRolePwd);

try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
retVal = false;
throw(ex);
}

return retVal;
}

最佳答案

首先,应用程序角色很少是正确的安全方法。它们旨在与作为低权限用户使用 Windows 集成身份验证连接的最终用户结合使用。这使应用程序代码能够使用半 secret 密码将 session 从最终用户的身份提升到应用程序角色。这实际上是一个桌面、客户端/服务器应用程序解决方案。因此,它从未真正与连接池配合得很好。

当连接池尝试重置已设置应用程序角色的连接时,将引发错误。因此,要使应用程序角色与 SqlConnection 一起工作,您必须禁用连接池(默认情况下在所有应用程序中启用,但可以在连接字符串中禁用),或者 sp_unsetapprole在将连接返回到池之前。

有关替代方法,请参阅 Application Role Alternatives .

关于具有 SQL Server 应用程序角色的 C# : Cannot continue the execution because the session is in the kill state,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com