我正在尝试为我的 .Net 应用程序实现自定义角色提供程序。我试图通过使用 Asp.NET 的角色提供程序存储过程来检查用户添加的角色是否已经存在于数据库中,例如
SqlConnection sqlConnection = new SqlConnection(conn);
SqlCommand sqlCommand = new SqlCommand("aspnet_Roles_RoleExists", sqlConnection);
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@RoleName", SqlDbType.VarChar, 256).Value = "/";
sqlCommand.Parameters.Add("@ApplicationName", SqlDbType.VarChar, 256).Value = roleName;
sqlCommand.Parameters.Add("@ReturnValue", SqlDbType.Int,4).Direction = ParameterDirection.ReturnValue;
try
{
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();
int x = (int)sqlCommand.Parameters["@ReturnValue"].Value;
if ((int)sqlCommand.Parameters["@ReturnValue"].Value == 0)
...
问题是当我添加角色时,例如 admin
并从数据库中手动运行 sp
DECLARE @return_value int
EXEC @return_value = [dbo].[aspnet_Roles_RoleExists]
@ApplicationName = N'/',
@RoleName = N'admin'
SELECT 'Return Value' = @return_value
它给了我正确的结果,但是如果我尝试admin
再次添加该角色,则来自应用程序的语句
(int)sqlCommand.Parameters["@ReturnValue"].Value
总是给我0
。任何人都可以指导我导致这种行为的原因