c # Форма входа (получить информацию из формы регистрации) - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь создать приложение для маркета.

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

Затем, когда они пытаются войти в систему, форма входа получает информацию из формы регистрации.

Затем откройте обычную форму пользователя, я сделал это далеко, но я получаю эту ошибку

вот форма для входа

    public OleDbConnection conect = new OleDbConnection();

    public Login()
    {
        InitializeComponent();
        conect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mhamad\Desktop\form\Sign_Up.mdb;
                                        Persist Security Info=False;";
    }

    private void Log_in_Click(object sender, EventArgs e)
    {
        conect.Open();

        OleDbCommand command = new OleDbCommand();
        command.Connection = conect;

        command.CommandText = "select * from Sign_Up where UserName='" + User_Name.Text + "' and Password='" + Password.Text + "'";

        OleDbDataReader reader =  command.ExecuteReader();
        int count = 0;

        while(reader.Read())
        {
            count = count + 1;
        }

        if (count==1)
        {
            MessageBox.Show("User Name and Password Are Correct ");
            Admin admin = new Admin();
            admin.Show();
            this.Hide();
        }

        if (count > 1)
        {
            MessageBox.Show("Dublicated UserName And Password ");
        }
         else
        {
            MessageBox.Show("User Name and Password Are Not Correct ");
        }

и это форма регистрации

    public OleDbConnection conect = new OleDbConnection();

    public SignUp_Form()
    {
        InitializeComponent();
        conect.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Mhamad\Desktop\form\Sign_Up.mdb;
                                        Persist Security Info=False;";
    }


    private void button1_Click(object sender, EventArgs e)
    {

        try
        {
            Login lognin = new Login();
            lognin.Show();
            this.Hide();

            conect.Open();
            OleDbCommand command = new OleDbCommand();

            command.Connection = conect;

            command.CommandText = 
                       "insert into Sign_Up 
                          ([FirstName],[LastName], [UserName],[Password]) 
                             values('"
                              + First.Text+ "','" 
                              + Last.Text + "','" 
                              + User.Text + "','" 
                              + Pass.Text + "')";

            command.ExecuteNonQuery();
            MessageBox.Show("Sign Up Succsaesful");

        }
        catch (Exception ex)
        {
            MessageBox.Show("Error   " + ex);
        }

это код ошибки:

OleDbDataReader reader =  command.ExecuteReader();

System.Data.OleDb.OleDbException: 'Таблица' Sign_Up 'уже открыта исключительно другим пользователем или уже открыта через пользовательский интерфейс и не может управляться программно.'

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

Я использую доступ к базе данных

1 Ответ

0 голосов
/ 25 февраля 2019

Вы не закрыли первое соединение, открытое в первой форме.Вы должны использовать блок using, который будет гарантировать, что соединение закрыто и правильно расположено.

Форма входа

        try
        {
            using (OleDbConnection conect = new OleDbConnection(connectionString))
            {
                conect.Open();
                OleDbCommand command = new OleDbCommand();
                command.Connection = conect;
                command.CommandText = "select * from Sign_Up where UserName='" + User_Name.Text + "' and Password='" + Password.Text + "'";
                OleDbDataReader reader = command.ExecuteReader();
                int count = 0;
                while (reader.Read())
                {
                    count = count + 1;
                }
                if (count == 1)
                {
                    MessageBox.Show("User Name and Password Are Correct ");
                    Admin admin = new Admin();
                    admin.Show();
                    this.Hide();
                }
                if (count > 1)
                {
                    MessageBox.Show("Dublicated UserName And Password ");
                }
                else
                {
                    MessageBox.Show("User Name and Password Are Not Correct ");
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Login form error: {ex.Message}");
        }

Соединение автоматически закрывается, когда код выходит из блока using.

Форма регистрации

        try
        {
            Login lognin = new Login();
            lognin.Show();
            this.Hide();

            using (OleDbConnection conect = new OleDbConnection(connectionString))
            {
                conect.Open();
                OleDbCommand command = new OleDbCommand();

                command.Connection = conect;

                command.CommandText =
                           "insert into Sign_Up 
                              ([FirstName],[LastName], [UserName],[Password]) 
                         values('"
                          + First.Text+ "','" 
                          + Last.Text + "','" 
                          + User.Text + "','" 
                          + Pass.Text + "')";

                command.ExecuteNonQuery();
                MessageBox.Show("Sign Up Succsaesful"); 
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Sign up error:{ex.message}");
        }

Если вам нужны роли сотрудника и администратора, лучше создать две разные формы, которые вы сможете открыть после входа в систему.

...