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;
答案 0 :(得分:4)
在用户名栏上创建一个唯一索引。
类似的东西:
CREATE UNIQUE INDEX index_username
ON aspnet_Users (UserName)
答案 1 :(得分:3)
在数据库中的列上放置一个唯一约束。然后在尝试更新之前检查现有用户名,或者捕获异常并相应地处理它。
答案 2 :(得分: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 request
保留在Transaction
下,并将其isolated
与其他用户提出的其他请求保持一致。