Запрашивать базу данных и вставлять новые данные в таблицу только при соблюдении условий первоначального запроса

Я работаю над небольшим проектом, в котором пользователь может войти в приложение при первом запуске, и это отлично работает. Я хотел добавить способ, позволяющий пользователям с атрибутом isAdmin создавать новые учетные записи, которые могут получить доступ к приложению.

Пока я ищу в таблице базы данных «employeeinfo», беря текст, который пользователь вводит в текстовое поле (this.txt_enterAdmin.Text), чтобы решить, есть ли у пользователя права на создание дополнительных учетных записей, а затем, если пользователь присутствует затем в «employeeinfo» они могут ввести новое имя пользователя и пароль в таблицу.

Это тоже отлично работает. Моя проблема в том, что я не хочу, чтобы любой пользователь мог создавать новые учетные записи, я хочу, чтобы администраторы, и только администраторы могли это делать. Я не уверен, как искать в базе данных с жестко запрограммированным ДА / НЕТ. Я добавил столбец под названием «isAdmin», а затем назначил каждому пользователю «ДА» или «НЕТ» в таблице данных SQLite, используя тип данных «текст».

Вот мой код, пожалуйста, посмотрите:

private void txt_add_newuser_Click(object sender, RoutedEventArgs e)
        {
           //logic to connect to database, search for the administrator password, and if the data is correct, then create a new user that can use the    application.

        SQLiteConnection sqliteCon = new SQLiteConnection(dbConnectionString);

            sqliteCon.Open();
            string YES = "select * from employeeinfo where isAdmin='" +  + "' ";
            string Query = "select * from employeeinfo where password='" + this.txt_enterAdmin.Text + "' and isAdmin= '" + this.YES + "' ";
            SQLiteCommand createCommand = new SQLiteCommand(Query, sqliteCon);


            createCommand.ExecuteNonQuery();
            SQLiteDataReader dr = createCommand.ExecuteReader();

            int count = 0;
            while (dr.Read())
            {
                count++;
            }
        if (count == 1)
        {

            try
            {
                SQLiteConnection sqlite_conn1;
                SQLiteCommand sqlite_cmd;
                sqlite_conn1 = new SQLiteConnection("Data Source=database.db;Version=3;");
                sqlite_conn1.Open();
                sqlite_cmd = sqlite_conn1.CreateCommand();
                sqlite_cmd.CommandText = "INSERT INTO EmployeeInfo ([username],[password]) values('" + txt_newusername.Text + "','" + txt_newPassword.Text + "' )";
                sqlite_cmd.ExecuteNonQuery();
                MessageBox.Show("Successfully added new user. Press OK/ENTER to Continue");
                //clears fields if new entry to database is accepted.
                if (txt_newusername != null)
                    (txt_newusername).Clear();
                if (txt_newPassword != null)
                    (txt_newPassword).Clear();
                if (txt_enterAdmin != null)
                    (txt_enterAdmin).Clear();
                sqlite_conn1.Close();
            }
            catch
            {
                MessageBox.Show("Everything was entered correctly, but something broke. Please contact support for help.");
            }
        }
        if (count > 1)
        {
          MessageBox.Show("Administrator password incorrect. Check your details and try again. Press enter to continue.");
          if (txt_enterAdmin != null)
          (txt_enterAdmin).Clear();
          sqliteCon.Close();
        }
        if (count < 1)
        {
           MessageBox.Show("Administrator password incorrect. Check your details and try again. Press enter to continue.");
           if (txt_enterAdmin != null)
           (txt_enterAdmin).Clear();
           sqliteCon.Close();
        }
        sqliteCon.Close();
    }

Я не уверен, как определить строку для значений ДА / НЕТ, потому что я не извлекаю данные из пользовательского элемента управления.

Мы также будем признательны за любые отзывы или ошибки, которые я могу исправить. Спасибо.

0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам действительно нужно определять string YES? В таблице isAdmin есть столбец employeeInfo, поэтому выберите его в Query (на самом деле, вы уже это делаете из-за SELECT *), затем проверьте значение ДА или НЕТ, чтобы решить, как действовать.

Другой вариант - добавить WHERE isAdmin = 'YES' к Query. Если строки не возвращаются, у этого пользователя нет надлежащих кредитов.

Ваше второе решение отлично сработало, спасибо. Не могли бы вы подробнее описать, как я бы реализовал первое? Как мне проверить значение ДА / НЕТ без второго решения?

Shamus Locke 14.09.2018 02:32

Я не знаю конкретного интерфейса, но должен быть способ получить значения столбцов, возвращаемые при выполнении SQL. Так что что-то вроде if (count == 1 and dr.isAdmin == 'YES'). Извините, я не знаю интерфейса / синтаксиса.

DinoCoderSaurus 14.09.2018 03:38

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