Tutorial: Guardar datos en una base de datos (Varias tablas)
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 la 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 de 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 Trabajar con valores de configuración.
Las tareas ilustradas en este tutorial incluyen:
Crear un proyecto nuevo de aplicación para Windows.
Crear y configurar un origen de datos en la aplicación con el Asistente para la configuración de orígenes de datos.
Establecer los controles de los elementos en la Orígenes de datos (ventana). Para obtener más información, vea Cómo: Establecer el control que se creará al arrastrar desde la ventana de orígenes de datos.
Crear controles enlazados a datos arrastrando elementos desde la ventana Orígenes de datos hasta el formulario.
Modificar un par de registros en cada tabla del conjunto de datos.
Modificar el código para devolver los datos actualizados del conjunto de datos a la base de datos.
Requisitos previos
Para poder completar este tutorial, necesitará:
- Acceso a la base de datos de ejemplo Northwind. Para obtener más información, vea Cómo: Instalar bases de datos de ejemplo.
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
Desde el menú Archivo, cree un nuevo proyecto.
Asigne al proyecto el nombre UpdateMultipleTablesWalkthrough.
Seleccione Aplicación para Windows y haga clic en Aceptar. Para obtener más información, vea Crear aplicaciones basadas en Windows.
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
En el menú Datos, haga clic en Mostrar orígenes de datos.
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.
Seleccione Base de datos en la página Elegir un tipo de datos de origen y luego haga clic en Siguiente.
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. Para obtener más información, vea Agregar/Modificar conexión (Cuadro de diálogo, General).
Si su base de datos requiere una contraseña, seleccione la opción para incluir datos confidenciales y haga clic en Siguiente.
Haga clic en Siguiente en la página Guardar la cadena de conexión en el archivo de configuración de la aplicación.
Expanda el nodo Tablas en la página Elija los objetos de base de datos.
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 deben 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
Expanda el nodo Customers en la ventana Orígenes de datos.
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 Cómo: Establecer el control que se creará al arrastrar desde la ventana de 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
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. Aparecen en la bandeja de componentes NorthwindDataSet, CustomersTableAdapter, BindingSource y BindingNavigator.
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 que se ajuste a las necesidades de su 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 (ADO.NET).
Para agregar lógica de actualización a la aplicación
Haga doble clic en el botón Guardar de BindingNavigator para abrir el controlador del evento bindingNavigatorSaveItem_Click en el Editor de código.
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:
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
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(); } }
Probar la aplicación
Para probar la aplicación
Presione F5.
Realice algunos cambios en los datos de uno o más registros de cada tabla.
Presione el botón Guardar.
Compruebe los valores de la base de datos para verificar que se guardaron los cambios.
Nota
Para obtener un código de ejemplo que muestra cómo actualizar la lista de pedidos al cambiar los clientes o agregar nuevos datos de cliente y pedidos, vea Cómo: Insertar nuevos registros en una base de datos y Tutorial: Guardar datos de tablas de datos relacionadas (actualización jerárquica).
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 en las tareas de este tutorial se incluyen:
Agregar funcionalidad de búsqueda al formulario. Para obtener más información, vea Cómo: Agregar una consulta parametrizada a una aplicación de Windows Forms.
Editar el origen de datos para agregar o quitar objetos de base de datos. Para obtener más información, vea Cómo: Editar un conjunto de datos.
Vea también
Conceptos
Novedades en el desarrollo de aplicaciones de datos
Enlazar controles de Windows Forms a datos en Visual Studio
Enlazar controles a los datos en Visual Studio
Otros recursos
Información general de las aplicaciones de datos en Visual Studio
Conectarse a datos en Visual Studio
Preparar la aplicación para recibir datos
Modificar datos en la aplicación
Historial de cambios
Fecha |
Historial |
Motivo |
---|---|---|
Mayo de 2011 |
Se han agregado vínculos al código de ejemplo adicional. |
Comentarios de los clientes. |