Присвоить переменной значение ячейки

Делаю запрос в БД Users, запрос для авторизации. Заодно нужно переменной 'office' присвоить значение из столбца logo данной строки.

Клиент вводит логин и пароль. Идет сравнение с базой и нужно еще вытащить значение из ячейки для дальнейшего сравнения (смотрите код).

Не могу сообразить, как составить запрос.

private void InputButton_Click(object sender, EventArgs e)
{
    string office="";
    SqlCommand cmd = sqlConn.CreateCommand();
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "select * from Users where login = '" + LoginBox.Text + "'and password= '" + PasswordBox.Text + "' and office=logo";
    if (office=="P1")
    {
 
    }

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Alexander Petrov

Ресурсы нужно освобождать. Для этого заключаем их в блоки using.

SQL-запросы нельзя составлять с помощью конкатенации строк. Причина: Внедрение SQL-кода. Взамен используем параметры.

Так как вам в данном конкретном случае нужно вернуть всего одно значение, то в запросе пишем select logo .... И используем метод ExecuteScalar.

Если запрос не нашёл пользователя с совпадающим логином и паролем, то вернётся значение null. Можете использовать проверку if (office == null) ....

string office;

string sql = "select logo from Users where login = @login and password = @password";

using (var sqlConnection = new SqlConnection(_connectionString))
{
    sqlConnection.Open();

    using (var sqlCommand = sqlConnection.CreateCommand())
    {
        sqlCommand.CommandText = sql;

        sqlCommand.Parameters.Add("login", SqlDbType.NVarChar).Value = LoginBox.Text;
        sqlCommand.Parameters.Add("password", SqlDbType.NVarChar).Value = PasswordBox.Text;

        office = (string)sqlCommand.ExecuteScalar();
    }
}

Здесь _connectionString - строка соединения. Она является полем класса.


А теперь самое главное. Не храните в БД пароли! В базе данных должны храниться хеши паролей, и желательно с солью. Вот замечательная статья по теме: Adding Salt to Hashing: A Better Way to Store Passwords. Большая, но зато подробно объясняющая, что к чему.

И почему в таблице колонка называется logo, а в коде вы используете office?

→ Ссылка