Hola amigos míos.
Estuve haciendo algunas pruebas en C# conectándome a diferentes bases de datos, leyendo datos, modificando y actualizando. Venía bien hasta hoy, día en el que se me ocurrió hacer algunas pruebas con Access.
Me conecto, pude leer mediante un
OleDbDataAdapter, por medio de este llené un
DataTable.
Lleno un
DataGridView por medio de un BindingSource.
this.Grilla.DataSource = bindDatos;
public void select(string sql, ref BindingSource bindDatos)
{
OleDbCommand comandoSelect = new OleDbCommand(sql, claseConexion.conexion);
adaptador = new OleDbDataAdapter(comandoSelect);
OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adaptador);
DataTable tabla = new DataTable();
adaptador.Fill(tabla);
bindDatos.DataSource = tabla;
}
y actualizo la DB
public void guardarCambios(ref BindingSource bindDatos)
{
try
{
adaptador.Update((DataTable)bindDatos.DataSource);
}
catch (OleDbException exception)
{
int i = 0;
MessageBox.Show("Index #" + i + "\n" +
"Message: " + exception.Errors[i].Message + "\n" +
"Native: " + exception.Errors[i].NativeError.ToString() + "\n" +
"Source: " + exception.Errors[i].Source + "\n" +
"SQL: " + exception.Errors[i].SQLState + "\n");
}
}
Todo esto venía funcionando bien hasta que agregué a la DB un campo del tipo "Si/No", cuando modifico alguno de estos campos en algún registro e intento actualizar, salta la siguiente excepción:
Si modifico cualquier otro dato sin tocar esa columna puedo actualizar sin problemas.
Creo haber entendido de algo que leí por ahí que en vez de utilizar esta línea
OleDbCommandBuilder commandBuilder = new OleDbCommandBuilder(adaptador);
Puedo especificar manualmente las sentencias sql ¿Esto es así? ¿Puede venir por ahí la solución?
Gracias