删除角色并恢复表中的角色

时间:2012-01-03 22:13:57

标签: asp.net asp.net-membership

错误。我使用了错误的命令。我想从表aspnet_UsersInRoles中删除用户的角色。 我猜这个命令可能是

Roles.RemoveUserFromRole(userName, origin_role);

但是我错误地使用了错误的命令。

Roles.DeleteRole(origin_role,false);

最初该表有4个角色。现在表中的RoleId只有两个,

61572264-4935-461d-9d8c-71f147f28c34
c09f25e6-fd6a-447b-8e0d-eba0cfc94e40

我如何找到并恢复它们? 非常感谢。

2 个答案:

答案 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;
            }
        }