Ваш отформатированный SQL-оператор не включает разделители для имени пользователя:
command.CommandText = String.Format("SELECT * FROM Users WHERE Username = {0}", username);
устанавливает текст команды примерно так:
SELECT * FROM Users WHERE Username = foo
Это легко исправить, но было бы лучше использовать SqlParameter
:
command.CommandText = "SELECT * FROM Users WHERE Username = @username");
command.Parameters.AddWithValue("@username", username);
Кроме того, ExecuteNonQuery
вернет -1 для числа затронутых строк, поскольку select
не влияет на строки. Вместо этого сделайте:
command.CommandText = "SELECT COUNT(*) FROM Users WHERE Username = @username");
command.Parameters.AddWithValue("@username", username);
...
int numberOfRows = (int)command.ExecuteScalar();