0

Asp.net 会员 2.0。

我想更新表 aspnet_user 中的用户名,最好的方法是直接更新表。

UPDATE aspnet_Users SET UserName = @UserName,LoweredUserName = LOWER( @UserName) 
WHERE UserName = @CurrentUname 

如何确保它是唯一的?

谢谢,

更新: If not exist (select UserName from aspnet_Users) Begin UPDATE aspnet_Users SET UserName = @UserName,LoweredUserName = LOWER( @UserName)
WHERE UserName = @CurrentUname
End

如何修改上面的代码?

第二次更新:

If not exist (select UserName from aspnet_Users WHERE UserName = @CurrentUname)
Begin 
  UPDATE aspnet_Users SET UserName = @UserName,LoweredUserName = LOWER( @UserName)
WHERE UserName = @CurrentUname
End
SELECT 1;
else
select 0;
4

3 回答 3

4

在用户名列上创建唯一索引。

就像是:

CREATE UNIQUE INDEX index_username
ON aspnet_Users (UserName)
于 2012-04-17T17:53:03.377 回答
3

在数据库中的列上放置唯一约束。然后在尝试更新之前检查现有用户名,或者捕获异常并相应地处理它。

于 2012-04-17T17:53:28.550 回答
1

除了@Icarus 和@Pete M 回复。这些已经是很好/值得信赖的建议。

另一种选择是,您可以使用TransactionScope吗?

伪代码

using (TransactionScope scope = new TransactionScope())
{
    UPDATE aspnet_Users 
    SET    UserName = @UserName,
           LoweredUserName = LOWER( @UserName) 
    WHERE  UserName = @CurrentUname

    if((select count(userName) 
        From   aspnet_Users
        Where  userName = @CurrentUname) = 1)
    Begin
         scope.Complete
    End
}

上述方法保持独立session of the requestTransaction并使其isolated免受其他用户的其他请求。

于 2012-04-17T18:25:01.757 回答