Вместо того, чтобы основываться на извлеченном имени пользователя, я выбрал вместо этого 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 текущего пользователя, это означает, что введенное пользователем имя пользователя уже занято, поэтому isValidNewUname будет иметь значение false. Если приведенный выше запрос не возвращает результаты, тогда @new_uname доступно, так как у него нет записи в базе данных.