C # Использование базы данных MS Acess в нескольких формах

#c# #database #forms #ms-access

#c# #База данных #формы #ms-access

Вопрос:

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

        public partial class newRegisteration : Form
{
    private OleDbConnection connection = new OleDbConnection();
    public newRegisteration()
    {
        InitializeComponent();
        connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersOmarS_000DocumentsVisual Studio 2015ProjectsSchool SystemSchool SystemSchool.accdb;
    Persist Security Info=False;";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = "INSERT into School ([Name], [Age], [Grade], [Class]) VALUES('"   nameTextBox2.Text   "', '"   ageTextBox2.Text   "', '"   gradeTextBox2.Text   "', '"   classTextBox2.Text   "') ";

            command.ExecuteNonQuery();
            MessageBox.Show("Data Saved");
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error"   ex);
            Clipboard.SetText(ex.ToString());
        }
    }        
}
 

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

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

РЕДАКТИРОВАТЬ: код второй формы

       private void CurrentStudents_Load(object sender, EventArgs e)
    {                         
        using (OleDbConnection connection2 = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersOmarS_000DocumentsVisual Studio 2015ProjectsSchool SystemSchool SystemSchool.accdb;Persist Security Info=False;")) 
        {
            OleDbCommand cmd = new OleDbCommand("Select * from School", connection2);
            OleDbDataAdapter olda = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            olda.Fill(dt);
            schoolDataGridView.DataSource = dt;
            schoolDataGridView.AutoGenerateColumns = true;
        }
    }
 

Ответ №1:

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

 using (OleDbConnection  connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:UsersOmarS_000DocumentsVisual Studio 2015ProjectsSchool SystemSchool SystemSchool.accdb;Persist Security Info=False;"))
            {
                connection.Open();
                //Your code goes here
            }
 

Комментарии:

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

2. извините, что это не сработало в начале, но теперь это сработало так хорошо: D спасибо.