错误。我使用了错误的命令。我想从表aspnet_UsersInRoles中删除用户的角色。 我猜这个命令可能是
Roles.RemoveUserFromRole(userName, origin_role);
但是我错误地使用了错误的命令。
Roles.DeleteRole(origin_role,false);
最初该表有4个角色。现在表中的RoleId只有两个,
61572264-4935-461d-9d8c-71f147f28c34
c09f25e6-fd6a-447b-8e0d-eba0cfc94e40
我如何找到并恢复它们? 非常感谢。
答案 0 :(得分:1)
讨厌说出来,但是你被软管了。默认的ASP.Net提供程序不包括任何类型的审核或软删除。如果您有数据库备份,则可以从中进行浏览/恢复。
答案 1 :(得分:0)
您可以在下面找到所调用函数的源代码。 它调用dbo.aspnet_Roles_DeleteRole存储过程。 我目前无法访问asp.net会员数据库,否则我会检查你。 您可能想要检查存储过程的作用,但正如ssyladin所提到的,我怀疑您将能够恢复任何内容(因为您将throwOnPopulatedRole参数发送为false)。
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
SecUtility.CheckParameter(ref roleName, true, true, true, 256, "roleName");
try {
SqlConnectionHolder holder = null;
try {
holder = SqlConnectionHelper.GetConnection(_sqlConnectionString, true);
CheckSchemaVersion( holder.Connection );
SqlCommand cmd = new SqlCommand("dbo.aspnet_Roles_DeleteRole", holder.Connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = CommandTimeout;
SqlParameter p = new SqlParameter("@ReturnValue", SqlDbType.Int);
p.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(p);
cmd.Parameters.Add(CreateInputParam("@ApplicationName", SqlDbType.NVarChar, ApplicationName));
cmd.Parameters.Add(CreateInputParam("@RoleName", SqlDbType.NVarChar, roleName));
cmd.Parameters.Add(CreateInputParam("@DeleteOnlyIfRoleIsEmpty", SqlDbType.Bit, throwOnPopulatedRole ? 1 : 0));
cmd.ExecuteNonQuery();
int returnValue = GetReturnValue(cmd);
if( returnValue == 2 )
{
throw new ProviderException(SR.GetString(SR.Role_is_not_empty));
}
return ( returnValue == 0 );
}
finally
{
if( holder != null )
{
holder.Close();
holder = null;
}
}
}
catch
{
throw;
}
}