Чтобы уточнить, согласно запросу OP, оператор using, возьмем метод comboBox1_SelectedIndexChanged:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string sql = "Select * From ["+TABLE (THIS IS A STRING I GET FROM PREVIOUS FORM)+"]";
using (conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=proyectos\" + Location(this is a string i get on the previous form) + ".mdb;User Id=admin;Password=;"))
{
conn.Open();
// Extraemos info de mi database y la meto en un datatable
Adaptador = new OleDbDataAdapter(sql, conn);
// Remove the OleDbCommandBuilder
Tabla = new DataTable();
Adaptador.Fill(Tabla);
// LLENO EL DATA GRID VIEW
Bsource = new BindingSource();
Bsource.DataSource = Tabla;
dataGridView1.DataSource = Bsource;
dataGridView1.Dock = DockStyle.Fill;
// ** NOTE:
// At this point, there's nothing to update - all that
// has happened is that you've bound the DataTable
// to the DataGridView.
Adaptador.Update(Tabla);//if i put it here nothing happens
} // Your connection will be closed at this point when the using
// statement goes out of scope.
}
ОБНОВЛЕНИЕ
MSDN говорит: «При созданииновый экземпляр OleDbCommandBuilder, любой существующий OleDbCommandBuilder, связанный с этим OleDbDataAdapter, выпущен ".
Однако, если вы хотите полностью уйти от OleDbCommandBuilder, вы можете сделать это (я обновил свой код выше, чтобы сделать это).Поскольку вы полагаете, что у вас есть проблемы со специальными символами, вероятно, стоит сделать это следующим образом.
Что-то вроде этого должно помочь - вам придется изменить команду обновления в зависимости от столбцов таблицы:
private void button1_Click_1(object sender, EventArgs e)
{
conn.Open();
Adaptador.UpdateCommand = "<Your SQL here>" // I.e., UPDATE [TABLE] SET....
try
{
Adaptador.Update((DataTable)Bsource.DataSource);
}
catch (Exception ex)
{
// Do something with the exception
}
}
Этот код является слегка измененной версией MSDN:
Как связать данные с элементом управления DataGridView Windows Forms
Обратите внимание, что они используют SqlDbCommandBuilder в этом примере, но общий принцип остается тем же.
На основании комментария Дэвида-В-Фентона вы можете захотеть выполнить инициализацию своего соединения и адаптера данных в событии Form_Load, а затемзакрыть соединение по событию Form_Closing.