Ваш код выглядит так, как будто он должен работать. Вы прошли через это и добавили часы на DS, чтобы увидеть, какие значения он имеет? Я выполнил код на моей машине для одной из моих тестовых БД, и он работал нормально.
Я бы, однако, предложил что-то похожее на это, так как это, на мой взгляд, намного чище:
using(SqlConnection con = new SqlConnection("Data Source=MICROSOF-58B8A5\\SQL_SERVER_R2;Initial Catalog=Daniel;Integrated Security=True"))
{
string query = "SELECT TOP 1 Username FROM Users WHERE Username=@UserName AND Password=@Password";
using (SqlCommand command = new SqlCommand(query, con))
{
command.Parameters.AddWithValue("@UserName", UserName);
command.Parameters.AddWithValue("@Password", Password);
con.Open();
string username = (string)command.ExecuteScalar(); //Add Null Check
// Do stuff if username exists
}
}
Вы всегда должны добавлять оператор using для объекта, который реализует IDisposable. (SqlConnection, SqlCommand) Также, чтобы предотвратить SqlInjection и подобные, используйте параметризованные запросы.