C# 更新用户名时验证用户名是否存在

C# 更新用户名时验证用户名是否存在,c#,mysql,sql,C#,Mysql,Sql,在这种情况下,有一个表单用于更新用户信息(用户名、密码、手机号码等) 下面是我用来检查数据库中是否存在用户名的代码: string sql = "SELECT username FROM (SELECT username FROM useraccount WHERE username != @old_uname)ua WHERE BINARY username = @new_uname LIMIT 1;"; MySqlCommand cmd = new MySqlCommand(sql, Sec

在这种情况下,有一个表单用于更新用户信息(用户名、密码、手机号码等)

下面是我用来检查数据库中是否存在用户名的代码:

string sql = "SELECT username FROM (SELECT username FROM useraccount WHERE username != @old_uname)ua WHERE BINARY username = @new_uname LIMIT 1;";
MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
cmd.Parameters.AddWithValue("@old_uname", old_uname);
cmd.Parameters.AddWithValue("@new_uname", new_uname);

if (cmd.ExecuteScalar() == null)
{
    isValidNewUname = true;
}

如果用户真的更改了他/她的用户名,它就会起作用。但当用户对用户名字段以外的任何内容进行更改时,就会出现问题。IsValidNewWuName变量仍为false。任何想法和建议都会大有帮助

我选择了uid,而不是基于获取的用户名。我用以下代码解决了这个问题:

string sql = "SELECT uid FROM useraccount WHERE BINARY username = @new_uname;";
                MySqlCommand cmd = new MySqlCommand(sql, SecurityMod.dbconn());
                cmd.Parameters.AddWithValue("@new_uname", new_uname);
                if (cmd.ExecuteScalar() == null || cmd.ExecuteScalar().ToString() == userID)
                {
                    isValidNewUname = true;
                }

此代码更短、更简单,因此更易于维护。这里发生的是查询在数据库中查找@new_uname的uid。然后将获取的uid与当前用户的uid进行比较。如果是相同的,则意味着获取的查询结果只是用户本身,因此它们是否相同并不重要,因为它只属于一个用户。如果获取的uid不等于当前用户的uid,则表示用户输入的用户名已被获取,因此IsValidNewWuName将为false。如果上面的查询没有返回结果,@new_uname是可用的,因为它在数据库中没有记录

运行两个命令:检查用户是否存在,如果是,则更改用户名。或者编写一个查询来实现这一点。或者一个存储的进程。你没有用户ID吗?是的,我在数据库中有一个用户ID列。不相关的提示:
MySqlCommand
是IDisposable的,所以应该在
using
块中。你可能喜欢读书。