Compartir a través de


Tutorial: Guardar datos en una base de datos (Varias tablas)

 

Publicado: abril de 2016

Uno de los escenarios más comunes en el desarrollo de aplicaciones consiste en mostrar los datos en un formulario de una aplicación Windows, editar los datos y devolverlos actualizados a la base de datos. Este tutorial crea un formulario en el que aparecen datos de dos tablas relacionadas y muestra cómo editar los registros y volver a guardar los cambios en la base de datos. En este ejemplo se utilizan las tablas Customers y Orders de la base de datos de ejemplo Northwind.

Puede guardar los datos de su aplicación en la base de datos llamando al método Update de un TableAdapter. Cuando se arrastran elementos desde la ventana Orígenes de datos, el código para guardar los datos se agrega automáticamente para la primera tabla colocada en un formulario. Cualquier tabla adicional agregada a un formulario requiere la adición manual del código necesario para guardar los datos. Este tutorial muestra cómo agregar código para guardar las actualizaciones de varias tablas.

Nota

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Para cambiar la configuración, elija la opción Importar y exportar configuraciones del menú Herramientas. Para obtener más información, vea Customizing Development Settings in Visual Studio.

Las tareas ilustradas en este tutorial incluyen:

Requisitos previos

Para poder completar este tutorial, necesitará:

Crear la aplicación para Windows

El primer paso es crear una Aplicación para Windows. La asignación de un nombre al proyecto es opcional en este paso, pero se le asignará un nombre para guardarlo más adelante.

Para crear el nuevo proyecto de aplicación para Windows

  1. En el menú Archivo, cree un nuevo proyecto.

  2. Asigne al proyecto el nombre UpdateMultipleTablesWalkthrough.

  3. Seleccione Aplicación para Windows y haga clic en Aceptar. Para obtener más información, vea Aplicaciones cliente.

    Se crea el proyecto UpdateMultipleTablesWalkthrough y se agrega al Explorador de soluciones.

Crear el origen de datos

Este paso crea un origen de datos a partir de la base de datos Northwind utilizando el Asistente para la configuración de orígenes de datos. Debe tener acceso a la base de datos de ejemplo Northwind para crear la conexión. Para obtener información sobre la configuración de la base de datos de ejemplo Northwind, vea Cómo: Instalar bases de datos de ejemplo.

Para crear el origen de datos

  1. En el menú Datos, haga clic en Mostrar orígenes de datos.

  2. En la ventana Orígenes de datos, haga clic en Agregar nuevo origen de datos para iniciar el Asistente para configuración de orígenes de datos.

  3. Seleccione Base de datos en la página Elegir un tipo de datos de origen y luego haga clic en Siguiente.

  4. En la página Elegir la conexión de datos realice una de las siguientes operaciones:

    • Si una conexión de datos a la base de datos de ejemplo Northwind está disponible en la lista desplegable, selecciónela.

      O bien

    • Seleccione Nueva conexión para abrir el cuadro de diálogo Agregar o modificar conexión.

  5. Si su base de datos requiere una contraseña, seleccione la opción para incluir datos confidenciales y haga clic en Siguiente.

  6. Haga clic en Siguiente en la página Guardar la cadena de conexión en el archivo de configuración de la aplicación.

  7. Expanda el nodo Tables en la página Elija los objetos de base de datos.

  8. Seleccione las tablas Customers y Orders y, a continuación, haga clic en Finalizar.

    Se agrega NorthwindDataSet al proyecto y las tablas aparecen en la ventana Orígenes de datos.

Establecer los controles que se van a crear

Para este tutorial, los datos de la tabla Customers estarán en un diseño Detalles en el que los datos se muestran en controles individuales. Los datos de la tabla Orders estarán en un diseño Cuadrícula mostrado en un control DataGridView.

Para establecer el tipo Drop para los elementos en la ventana Orígenes de datos

  1. Expanda el nodo Customers en la ventana Orígenes de datos.

  2. Cambie el control de la tabla Customers a controles individuales seleccionando Detalles en la lista de controles del nodo Customers. Para obtener más información, vea Establecer el control que se creará al arrastrar desde la ventana Orígenes de datos.

Crear el formulario enlazado a datos

Puede crear los controles enlazados a datos arrastrando elementos desde la ventana Orígenes de datos al formulario.

Para crear controles enlazados en el formulario

  1. Arrastre el nodo Customers principal desde la ventana Orígenes de datos a Form1.

    Los controles enlazados a datos con etiquetas descriptivas aparecen en el formulario, junto con una barra de herramientas (BindingNavigator) para navegar por los registros. En la bandeja de componentes aparecen NorthwindDataSet, CustomersTableAdapter, BindingSource y BindingNavigator.

  2. Arrastre el nodo Orders relacionado desde la ventana Orígenes de datos hasta Form1.

    Nota

    El nodo Orders relacionado se encuentra debajo de la columna Fax y es un nodo secundario del nodo Customers.

    En el formulario aparecen un control DataGridView y una barra de herramientas (BindingNavigator) para navegar por los registros. En la bandeja de componentes aparece un objeto OrdersTableAdapter y un objeto BindingSource.

Agregar código para actualizar la base de datos

Puede actualizar la base de datos llamando a los métodos Update de los TableAdapters Customers y Orders. De manera predeterminada, se agrega un controlador de eventos para el botón Guardar de BindingNavigator al código del formulario para enviar las actualizaciones a la base de datos. Este procedimiento modifica ese código de modo que envíe las actualizaciones en el orden apropiado y se elimine así la posibilidad de que se produzcan errores de integridad referencial. El código también implementa el control de errores colocando la llamada de actualización en un bloque try-catch. Puede modificar el código para satisfacer las necesidades de la aplicación.

Nota

Para mayor claridad, este tutorial no utiliza una transacción, pero si va a actualizar dos o más tablas relacionadas, debería incluir toda la lógica de actualización dentro de una transacción. Una transacción es un proceso que asegura que todos los cambios relacionados con una base de datos son correctos antes de confirmar cualquier cambio. Para obtener más información, vea Transacciones y simultaneidad.

Para agregar la lógica de actualización a la aplicación

  1. Haga doble clic en el botón Guardar de BindingNavigator para abrir el controlador del evento bindingNavigatorSaveItem_Click en el Editor de código.

  2. Reemplace el código del controlador de eventos para que llame a los métodos Update de los TableAdapters relacionados. El código siguiente crea en primer lugar tres tablas de datos temporales para la información actualizada de cada DataRowState (Deleted, Added y Modified). A continuación se ejecutan las actualizaciones en el orden apropiado. El código debe tener este aspecto:

                this.Validate();
                this.ordersBindingSource.EndEdit();
                this.customersBindingSource.EndEdit();
    
                NorthwindDataSet.OrdersDataTable deletedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Deleted);
    
                NorthwindDataSet.OrdersDataTable newOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Added);
    
                NorthwindDataSet.OrdersDataTable modifiedOrders = (NorthwindDataSet.OrdersDataTable)
                    northwindDataSet.Orders.GetChanges(DataRowState.Modified);
    
                try
                {
                    // Remove all deleted orders from the Orders table.
                    if (deletedOrders != null)
                    {
                        ordersTableAdapter.Update(deletedOrders);
                    }
    
                    // Update the Customers table.
                    customersTableAdapter.Update(northwindDataSet.Customers);
    
                    // Add new orders to the Orders table.
                    if (newOrders != null)
                    {
                        ordersTableAdapter.Update(newOrders);
                    }
    
                    // Update all modified Orders.
                    if (modifiedOrders != null)
                    {
                        ordersTableAdapter.Update(modifiedOrders);
                    }
    
                    northwindDataSet.AcceptChanges();
                }
    
                catch (System.Exception ex)
                {
                    MessageBox.Show("Update failed");
                }
    
                finally
                {
                    if (deletedOrders != null)
                    {
                        deletedOrders.Dispose();
                    }
                    if (newOrders != null)
                    {
                        newOrders.Dispose();
                    }
                    if (modifiedOrders != null)
                    {
                        modifiedOrders.Dispose();
                    }
                }
    
            Me.Validate()
            Me.OrdersBindingSource.EndEdit()
            Me.CustomersBindingSource.EndEdit()
    
            Dim deletedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Deleted), NorthwindDataSet.OrdersDataTable)
    
            Dim newOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Added), NorthwindDataSet.OrdersDataTable)
    
            Dim modifiedOrders As NorthwindDataSet.OrdersDataTable = CType(
                NorthwindDataSet.Orders.GetChanges(Data.DataRowState.Modified), NorthwindDataSet.OrdersDataTable)
    
    
            Try
                ' Remove all deleted orders from the Orders table.
                If Not deletedOrders Is Nothing Then
                    OrdersTableAdapter.Update(deletedOrders)
                End If
    
                ' Update the Customers table.
                CustomersTableAdapter.Update(NorthwindDataSet.Customers)
    
                ' Add new orders to the Orders table.
                If Not newOrders Is Nothing Then
                    OrdersTableAdapter.Update(newOrders)
                End If
    
                ' Update all modified Orders.
                If Not modifiedOrders Is Nothing Then
                    OrdersTableAdapter.Update(modifiedOrders)
                End If
    
                NorthwindDataSet.AcceptChanges()
    
            Catch ex As Exception
                MsgBox("Update failed")
    
            Finally
                If Not deletedOrders Is Nothing Then
                    deletedOrders.Dispose()
                End If
    
                If Not newOrders Is Nothing Then
                    newOrders.Dispose()
                End If
    
                If Not modifiedOrders Is Nothing Then
                    modifiedOrders.Dispose()
                End If
            End Try
    

Probar la aplicación

Para probar la aplicación

  1. Presione F5.

  2. Realice algunos cambios en los datos de uno o más registros de cada tabla.

  3. Presione el botón Guardar.

  4. Compruebe los valores de la base de datos para verificar que se guardaron los cambios.

Pasos siguientes

Dependiendo de los requisitos de la aplicación, hay varios pasos que puede que desee realizar después de crear un formulario enlazado a datos en su aplicación para Windows. Entre las mejoras que podría realizar se incluyen:

Vea también

Tutoriales sobre datos
Enlazar controles de Windows Forms a datos en Visual Studio
Información general de las aplicaciones de datos en Visual Studio
Conectarse a datos en Visual Studio
Preparar la aplicación para recibir datos
Buscar datos en la aplicación
Enlazar controles a los datos en Visual Studio
Modificar datos en la aplicación
Validar datos
Guardar datos