Система входа в приложение не работает SQL LOCAL

Я делаю свою программу, и мне нужно войти и зарегистрироваться в системе. Моя система регистрации работает, но вход в систему не работает.

Я сделал систему регистрации

SqlConnection sqlCon = new SqlConnection("Data Source = (LocalDB)\\MSSQLLocalDB; Initial Catalog = ConnectionDb; Integrated Security = True");
SqlDataAdapter sda = new SqlDataAdapter("Select Count(*) From UsersConfig where Email='" + textBox1.Text.Trim() + "' and Password='" + textBox2.Text.Trim() + "'", sqlCon);
DataTable dtbl = new DataTable();
sda.Fill(dtbl);
if (dtbl.Rows[0][0].ToString() == "1")
{
    SqlConnection sqlConn = new SqlConnection("Data Source = (LocalDB)\\MSSQLLocalDB; Initial Catalog = ConnectionDb; Integrated Security = True");
    SqlDataAdapter sdaa = new SqlDataAdapter("Select Count(*) From UsersConfig where Email='" + textBox1.Text.Trim() + "' and Password='" + textBox2.Text.Trim() + "' and AdminYes='" + "1" + "'", sqlConn);
    DataTable dtbll = new DataTable();
    sdaa.Fill(dtbll);
    if (dtbll.Rows[0][0].ToString() == "1")
    {
        MessageBox.Show("Has admin");
        Form adminpanel = new AdminPanel();
        adminpanel.Show();
        this.Hide();
    }
    else
    {
        MessageBox.Show("Hasn't got admin");
    }
}
else
{
    MessageBox.Show("Not working!");
}

у меня нет сообщения об ошибке

Почему вы открываете базу данных дважды? Вы должны использовать одно соединение с двумя адаптерами, а затем установить первый.

Tony Dong 29.05.2019 23:00

Для этого не нужно использовать таблицу данных, передайте свой запрос в SqlCommand и выполните его, используя ExecuteScalar Это идеально подходит для возврата одного результата из запроса. Я также думаю, что вместо этого вы могли бы просто вернуть значение AdminYes, и если строка не возвращается, вход в систему не удался, если строка возвращается, вы знаете, является ли он администратором. Кроме того, при поиске двух вещей, которые я перечислил, также обратите внимание на использование параметров для ваших пользовательских входных значений. И в идеале вы должны сравнивать хэш пароля, а не хранить пароли в виде простого текста в своей таблице.

Charles May 29.05.2019 23:00

Посмотрите первый пример на этой странице Microsoft. Он использует хранимую процедуру, но показывает, как использовать оператор using для SqlConnection и как обрабатывать перехват ошибок с помощью try {} catch {} для SqlException ошибок. Возможно, у вас возникла ошибка подключения к базе данных. docs.microsoft.com/en-us/dotnet/api/…

jwatts1980 29.05.2019 23:12

Одинарные кавычки используются для обозначения того, что параметр является строкой. AdminYes должен быть нулем или единицей, и у вас есть одинарные кавычки вокруг единицы, что делает ее строкой. Итак, вы сравниваете «1» с 1.

jdweng 29.05.2019 23:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Предложения из комментариев выше и ссылка Microsoft изменили бы код, чтобы он выглядел примерно так, как показано ниже. Кроме того, НАСТОЯТЕЛЬНО рекомендуется использовать параметры вместо построения строки вручную, так как построение строки SQL может привести к уязвимостям безопасности SQL-инъекций.

ПРИМЕЧАНИЕ. Я не думаю, что это исправит вашу ошибку, но может помочь найти проблему.

string connectionString = "Data Source = (LocalDB)\\MSSQLLocalDB; Initial Catalog = ConnectionDb; Integrated Security = True";

using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
    string email = textBox1.Text.Trim();
    string pwd = textBox2.Text.Trim();

    //NOTE: passwords shouldn't be stored in plain text. 
    //There should be an hashing step here like:
    pwd = MyCustomPasswordHasher(email, pwd);

    string sql = "Select [AdminYes] From UsersConfig where Email=@user and Password=@password";

    SqlCommand command = new SqlCommand(sql, sqlCon);
    command.Parameters.AddWithValue("@user", email);
    command.Parameters.AddWithValue("@password", pwd);

    try
    {
        command.Connection.Open();
        object result = command.ExecuteScalar();

        if (result == null)
        {
            MessageBox.Show("Invalid credentials!");
        }
        else if (result.ToString() == "1")
        {
            MessageBox.Show("Has admin");
            Form adminpanel = new AdminPanel();
            adminpanel.Show();
            this.Hide();
        }
        else
        {
            MessageBox.Show("Hasn't got admin");
        }
    }
    catch (SqlException ex)
    {
        MessageBox.Show("Database errors!");
    }
}

@Навио отлично. Пожалуйста, убедитесь, что это ответ. Спасибо!

jwatts1980 30.05.2019 16:54

Другие вопросы по теме