Приложение Forms не принимает мой столбец таблицы SQL с именами пользователей, но принимает пароль - PullRequest
0 голосов
/ 21 мая 2019

Я создаю приложение форм, которому нужна функция входа в систему. Я установил соединение MySqL и применил его к своей форме. Он отвечает на мои ответы, давая мне ответ с пропуском или без пропуска, НО это только тогда, когда я прошу его сопоставить только ввод с паролями в базе данных. Я не могу заставить его совпадать с именами пользователей и паролями, хотя я, кажется, настроил свою таблицу так, как должно быть. У меня есть 3 столбца с идентификатором, именем пользователя (brugernavn) и паролем. Я могу заставить его принять обе учетные данные, если я сопоставлю идентификаторы с правильным паролем, fx SELECT * FROM bruger WHERE password =@pass AND id=@usn

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

Я пытался изменить мои параметры на что-то другое, но это не помогло. Кажется, с реальной таблицей проблемы не было, так как она могла получить доступ к моей информации о паролях и идентификаторах, поэтому я попытался изменить некоторые значения и другие данные из столбца имени пользователя, но это не помогло. У меня есть имя пользователя и пароль, используя varchar (100), а идентификатор использует INT (11) в качестве основного.

MySqlConnection connection = new MySqlConnection("server=localhost;port=3306;username=root;password=;database=bruger");       

    public void openConnection()
    {
        if (connection.State == System.Data.ConnectionState.Closed)
        {
            connection.Open();
        }
    }
    public void closeConnection()
    {
        if (connection.State == System.Data.ConnectionState.Open)
        {
            connection.Close();
        }
    }
    public MySqlConnection GetConnection()
    {
        return connection;
    }


private void Loginbutton_Click(object sender, EventArgs e)

{
        DB db = new DB();
        string username = textBoxBrugernavn.Text;
        string password = textBoxPassword.Text;
        DataTable table = new DataTable();
        MySqlDataAdapter adapter = new MySqlDataAdapter();
        MySqlCommand command = new MySqlCommand("SELECT * FROM bruger WHERE password =@pass AND brugernavn =@usn", db.GetConnection());
        command.Parameters.Add("@usn", MySqlDbType.VarChar).Value = username;
        command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = password;
        adapter.SelectCommand = command;
        adapter.Fill(table);          
        if (table.Rows.Count > 0)
        {
            MessageBox.Show("YES");
        }
        else
        {
            MessageBox.Show("NO");
        }

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

1 Ответ

0 голосов
/ 21 мая 2019

Храните ваши объекты данных локально.Тогда вы можете быть уверены, что они закрыты и утилизированы.Блоки использования позаботятся об этом, даже если возникнет ошибка.Поскольку нам нужен только один фрагмент данных (количество), мы можем использовать ExecuteScalar, который возвращает первый столбец первой строки в наборе результатов.Конечно, в реальном приложении вы никогда не будете хранить пароли в виде простого текста.Они будут солены и перемешаны.

    private void Loginbutton_Click(object sender, EventArgs e)
    {
        Int64 RecordCount = 0;
        using (MySqlConnection cn = new MySqlConnection("server=localhost;port=3306;username=root;password=;database=bruger"))
        {
            using (MySqlCommand command = new MySqlCommand("SELECT Count(*) FROM bruger WHERE password =@pass AND brugernavn =@usn", cn))
            {
                command.Parameters.Add("@usn", MySqlDbType.VarChar).Value = textBoxBrugernavn.Text;
                command.Parameters.Add("@pass", MySqlDbType.VarChar).Value = textBoxPassword.Text;
                cn.Open();
                RecordCount = (Int64)command.ExecuteScalar();
            }
        }
        if (RecordCount > 0)
        {
            MessageBox.Show("YES");
            //Add code to proceed to your next form
        }
        else
        {
            MessageBox.Show("NO");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...