0

Web サイトで 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

役割の作成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 に答える
1

あなたのコードは正しくありません。

最初に、そのユーザーのパラメーター (ユーザー名、パスワード、電子メールなど) を渡してユーザーを作成します。

次に、ロール プロバイダーを使用してそのユーザーをロールに追加します。

于 2012-10-30T15:45:31.107 に答える