Что не так с моим оператором SQL, что-то не работает - PullRequest
1 голос
/ 04 июня 2010

У меня есть очень простой метод, вызываемый для проверки правильности пароля пользователя. Любая помощь о том, почему это не работает? Это для Microsoft SQL Server.

public bool UserNameExists()
    {
        using (SqlConnection con = new SqlConnection("CONNECTION STRING AQUI!"))
        {
            con.Open();
            try
            {
                using (SqlCommand command = new SqlCommand(string.Format("SELECT * FROM Policia WHERE NumeroPlaca = '{0}' AND Password = '{1}'", Session.Contents["username"], Session.Contents["password"]), con))
                {
                    SqlDataReader reader = command.ExecuteReader();
                    if (reader.FieldCount > 0)
                    {
                        return true;
                    } 
                    else 
                    {
                        return false;
                    }
                }
            }
            catch
            {

            }

            return false;
        }
    }

Ответы [ 2 ]

4 голосов
/ 04 июня 2010

Вы также можете сделать:

"SELECT COUNT(*) FROM Policia..."

А потом:

int result = Convert.ToInt32(command.ExecuteScalar());
if (result > 0)
{
  return true;
} 
else 
{
  return false;
}

Полный код:

public bool UserNameExists()
{
  int result = int.MinValue;

  using (SqlConnection connection = new SqlConnection(_connectionString))
  {
    connection.Open();
    SqlCommand command = new SqlCommand();
    command.Connection = connection;
    command.CommandType = CommandType.StoredProcedure;
    command.CommandText = "SELECT COUNT(*) FROM Policia WHERE NumeroPlaca = @username AND Password = @password";
    command.Parameters.Clear();
    command.Parameters.Add("@username", SqlDbType.VarChar).Value = Session.Contents["username"];
    command.Parameters.Add("@password", SqlDbType.VarChar).Value = Session.Contents["password"];
    result = Convert.ToInt32(command.ExecuteScalar());
  }

  if (result > 0)
  {
    return true;
  }
  {
    return false;
  }
}
3 голосов
/ 04 июня 2010

FieldCount получает количество столбцов в текущей строке, которое всегда будет отличным от нуля. Вы ищете количество строк в наборе результатов. Используйте свойство HasRows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...