Как правильно использовать соединение sqlite в нескольких формах?
У меня есть два класса в моем приложении C#.
Я инициирую и открываю соединение с БД в main.cs
public static void dbConnect() { string dbPath = Application.StartupPath + "/database.db"; SQLiteConnection conn = new SQLiteConnection("Data Source =" + dbPath); conn.Open(); }
У меня есть еще одна форма Add.cs, где я пытаюсь заполнить combobox из базы данных. Как только я это делаю, combobox заполняется, но после того, как я закрываю Add.cs и функция в main.cs пытается использовать объект conn, она выдает мне ошибку
Cannot access a disposed object object name: 'sqliteconnection'
Что я уже пробовал:
Вот как я попытался получить доступ к БД, используя вторую форму
private void AddStore_Load(object sender, EventArgs e) { using (frmMain.conn) { try { string query = "SELECT * FROM routes;"; SQLiteDataAdapter da = new SQLiteDataAdapter(query, frmMain.conn); DataSet ds = new DataSet(); da.Fill(ds, "routes"); cmbRoute.DisplayMember = "route_name"; cmbRoute.ValueMember = "route_id"; cmbRoute.DataSource = ds.Tables["routes"]; } catch (Exception ex) { MessageBox.Show("Error "+ex); } } }
Поскольку это не сработало, я попытался создать новую строку подключения с теми же деталями и повторно подключиться к БД, и это сработало
private void AddStore_Load(object sender, EventArgs e) { string dbPath = Application.StartupPath + "/database.db"; using (SQLiteConnection conn = new SQLiteConnection("Data Source =" + dbPath)) { try { string query = "SELECT * FROM routes;"; SQLiteDataAdapter da = new SQLiteDataAdapter(query, frmMain.conn); DataSet ds = new DataSet(); da.Fill(ds, "routes"); cmbRoute.DisplayMember = "route_name"; cmbRoute.ValueMember = "route_id"; cmbRoute.DataSource = ds.Tables["routes"]; } catch (Exception ex) { MessageBox.Show("Error "+ex); } } }
Но я скептически отношусь к этому методу, потому что он создает несколько подключений к одной и той же БД.