【问题标题】:ASP.NET Role and Member ManagementASP.NET 角色和成员管理
【发布时间】:2012-10-30 15:31:58
【问题描述】:

我在我的网站上使用 asp.net 的内置角色和成员管理工具。我目前正在升级站点的功能,以便站点管理员可以添加/删除角色,并从站点页面内部管理不同角色的访问。但是,当我执行时

System.Web.Security.Roles.CreateRole(roleName); //Where roleName is a string value of the role that I am creating, and it is not a duplicate name.

我收到错误消息

System.Data.SqlClient.SqlException: Conversion failed when converting from a character string to uniqueidentifier.

该站点在共享主机上运行,​​我正在使用 ASP.NET 表、触发器和存储过程。奇怪的是,我使用内置方法将用户更新为角色、创建用户、删除用户、重置密码等都没有问题。系统为我创建的存储过程是否有可能存在某种缺陷,并且没有返回它需要执行的所有数据?如果不是,那么问题的其他原因可能是什么?

【问题讨论】:

    标签: sql asp.net stored-procedures


    【解决方案1】:

    这里是创建角色 SP:

    CREATE PROCEDURE [dbo].[aspnet_Roles_CreateRole]
    @ApplicationName  nvarchar(256),
    @RoleName         nvarchar(256)
    

    作为 开始 声明 @ApplicationId 唯一标识符 选择@ApplicationId = NULL

    DECLARE @ErrorCode     int
    SET @ErrorCode = 0
    
    DECLARE @TranStarted   bit
    SET @TranStarted = 0
    
    IF( @@TRANCOUNT = 0 )
    BEGIN
        BEGIN TRANSACTION
        SET @TranStarted = 1
    END
    ELSE
        SET @TranStarted = 0
    
    EXEC dbo.aspnet_Applications_CreateApplication @ApplicationName, @ApplicationId OUTPUT
    
    IF( @@ERROR <> 0 )
    BEGIN
        SET @ErrorCode = -1
        GOTO Cleanup
    END
    
    IF (EXISTS(SELECT RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = LOWER(@RoleName) AND ApplicationId = @ApplicationId))
    BEGIN
        SET @ErrorCode = 1
        GOTO Cleanup
    END
    
    INSERT INTO dbo.aspnet_Roles
                (ApplicationId, RoleName, LoweredRoleName)
         VALUES (@ApplicationId, @RoleName, LOWER(@RoleName))
    
    IF( @@ERROR <> 0 )
    BEGIN
        SET @ErrorCode = -1
        GOTO Cleanup
    END
    
    IF( @TranStarted = 1 )
    BEGIN
        SET @TranStarted = 0
        COMMIT TRANSACTION
    END
    
    RETURN(0)
    

    清理:

    IF( @TranStarted = 1 )
    BEGIN
        SET @TranStarted = 0
        ROLLBACK TRANSACTION
    END
    
    RETURN @ErrorCode
    

    结束

    【讨论】:

    • 宾果游戏,非常感谢您的帮助!如果其他人在使用 GoDaddy 时遇到此问题,我强烈建议用这个替换 GoDaddy 的 CreateRole 过程
    【解决方案2】:

    您的代码不正确。

    您首先通过传入该用户的参数(用户名、密码、电子邮件等)来创建用户。

    然后你add that user to a role using the Role Provider

    【讨论】:

    • 我刚刚意识到我在上面的代码示例中输入了错误的方法名称。在我的代码中是 .CreateRole()。谢谢你指出这一点。
    • 好吧,这是有道理的。您尝试使用的角色的名称是什么?
    • Testing、Emailer、AdvancedMember 是我尝试过的三个名称,但都以相同的消息失败。
    • 应该没问题。您的连接字符串是否称为 LocalSqlServer?该线程似乎表明它必须是:stackoverflow.com/questions/1746068/…
    • 我一有机会就试试。谢谢,我已经厌倦了与 GoDaddy 打交道以及为解决他们的问题而必须采取的所有小技巧。
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    相关资源
    最近更新 更多