0

我在我的网站上使用 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 表、触发器和存储过程。奇怪的是,使用内置方法将用户更新为角色、创建用户、删除用户、重置密码等都没有问题。系统为我创建的存储过程是否有可能存在某种缺陷,并且没有返回它需要执行的所有数据?如果不是,那么还有什么可能是问题的原因?

4

2 回答 2

1

你的代码不正确。

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

然后,您使用角色提供者将该用户添加到角色

于 2012-10-30T15:45:31.107 回答
1

这是创建角色 SP:

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

AS BEGIN DECLARE @ApplicationId uniqueidentifier SELECT @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

结尾

于 2012-10-30T17:01:36.460 回答