elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOLUCIONADO] DataAdapter.Update no guarda los cambios en la base de datos MySQL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] DataAdapter.Update no guarda los cambios en la base de datos MySQL  (Leído 9,005 veces)
calvo225

Desconectado Desconectado

Mensajes: 1


Ver Perfil
[SOLUCIONADO] DataAdapter.Update no guarda los cambios en la base de datos MySQL
« en: 13 Agosto 2009, 19:11 pm »

Hola a todos, a ver si me podéis echar una mano que me estoy volviendo un poco loco buscando la respuesta.

Resulta que en una aplicación en C# 3.0 y Framework 3.5, accedo a una base de datos MySQL a través del conector MySQL Connetor. La conexión se realiza correctamente, he enlazado un campo de una tabla a un TextBox a través de DataBindings, pero al actualizar el DataAdapter, los cambios del DataSet no se reflejan en la base de datos. En el DataSet los datos sí han cambiado (lo miro en la ejecución paso a paso), pero no en la base de datos.

Sin embargo, si enlazo un DataGridView a la base de datos, y modifico algo en él, los cambios sí se realizan correctamente. No sé qué estoy haciendo mal, agradecería cualquier ayuda.

Os dejo el código (en realidad es más complejo, pero lo he simplificado en un ejemplo más sencillo).

El formulario sólo tiene un TextBox y un botón.

public partial class Form1 : Form
    {
        private DataSet ds;
        private MySql.Data.MySqlClient.MySqlConnection conn;
        private MySql.Data.MySqlClient.MySqlDataAdapter da;
        private MySql.Data.MySqlClient.MySqlCommandBuilder cb;
        private string connectionstring;
        

        public Form1()
        {

            InitializeComponent();

            // Conexión con la base de datos
            connectionstring="server=*;uid=*;pwd=*;database=*;";
            conn = new MySql.Data.MySqlClient.MySqlConnection();
            conn.ConnectionString = this.connectionstring;
            conn.Open();

            string SelectCommand = "SELECT ID, Campo1 FROM Tabla;";

            da = new MySql.Data.MySqlClient.MySqlDataAdapter(SelectCommand, conn);
            cb = new MySql.Data.MySqlClient.MySqlCommandBuilder(da);

            // Esto se supone que lo hace el CommandBuilder pero al depurar no genera los comandos en el DataAdapter
            da.InsertCommand = cb.GetInsertCommand();
            da.UpdateCommand = cb.GetUpdateCommand();
            da.DeleteCommand = cb.GetDeleteCommand();

            ds = new DataSet();
            da.Fill(ds, "Tabla");
            textBox1.DataBindings.Add(new Binding("Text", ds, "Tabla.Campo1"));
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            
            da.Update(ds, "Tabla");
            
        }



------------

La solución pasa por crear un BindingSource después del

     da.Fill(ds, "Tabla");

y en el botón llamar a

    bs.EndEdit();


Por tanto, haciendo lo siguiente, funciona:

// En la declaración de variables globales
private BindingSource bs;

// Dentro de Form_Load, después de da.Fill(ds, "Tabla");
bs = new BindingSource();
bs.DataSource = ds;
bs.DataMember = "Tabla";
textBox1.DataBindings.Add("Text", bs, "Campo1");  //OJO, se sustituye el DataSet por el BindingSource y se toma el campo directamente,
                                                                           //no hay que indicar la tabla ya que se seleccionó como DataMember en el BindingSource

// En el botón, antes de da.Update(ds, "Tabla");
bs.EndEdit();


« Última modificación: 14 Agosto 2009, 18:59 pm por calvo225 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
SOLUCIONADO Duda base de dato MYSQL cifrado de columna PASS
Bases de Datos
.:UND3R:. 0 2,952 Último mensaje 19 Abril 2011, 19:42 pm
por .:UND3R:.
Insertar datos con un update, dentro de otro update con SQLi(Mysql)
Nivel Web
WarGhost 3 5,558 Último mensaje 23 Agosto 2011, 03:37 am
por WarGhost
conectar base de datos mysql en w7 (solucionado)
Programación C/C++
el_porra 1 3,463 Último mensaje 15 Septiembre 2011, 17:33 pm
por el_porra
[MySQL y Python]No guarda los datos en MySQL
Scripting
stuckey 3 2,694 Último mensaje 21 Noviembre 2013, 08:06 am
por Shell Root
Detectar cambios en una base de datos con java
Java
puntoBat 3 3,299 Último mensaje 28 Junio 2014, 10:02 am
por puntoBat
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines