Información general sobre la actualización jerárquica

La actualización jerárquica hace referencia a guardar los datos actualizados de un conjunto de datos que recupera dos o más tablas relacionadas a una base de datos manteniendo la integridad referencial. La integridad referencial hace referencia a las reglas de coherencia proporcionadas por las restricciones FOREIGN KEY en una base de datos que controlan el comportamiento de insertar, actualizar y eliminar registros relacionados. Por ejemplo, es integridad referencial que obliga a crear un registro de cliente antes de crear los pedidos para ese cliente.

Cuando los programadores crearon las aplicaciones de datos en Visual Studio 2005 y versiones anteriores, el código que se generaba de forma automática guardaba únicamente los datos modificados en la primera tabla que se arrastraba desde la ventana Orígenes de datos. Al arrastrar las tablas adicionales de la ventana Orígenes de datos, los usuarios tuvieron que agregar manualmente el código para guardar los cambios en esas tablas en la base de datos. No sólo fue necesario que los usuarios agregaran el código para llamar al método TableAdapter.Update para cada tabla, también tuvo que incorporarse la lógica para realizar inserciones, actualizaciones y eliminaciones concretas en el orden adecuado para cada tabla y evitar las infracciones de integridad referencial. (Por ejemplo, los nuevos clientes deben guardarse antes de agregar sus pedidos, y los pedidos se deben eliminar antes de quitar un cliente existente.)

A partir de Visual Studio 2008, los conjuntos de datos con tipo están mejorados con un nuevo componente TableAdapterManager. TableAdapterManager reduce el código que se necesita para guardar datos en varias tablas relacionadas de varias rutinas con muchas líneas de código en una única llamada al método: TableAdapterManager.UpdateAll(TypedDataset). TableAdapterManager proporciona toda la lógica subyacente que se requiere para mantener la integridad referencial durante las operaciones de actualización (guardar) entre el conjunto de datos y la base de datos. Para obtener más información, vea Información general sobre TableAdapterManager.

Habilitar la actualización jerárquica en un conjunto de datos

De forma predeterminada, la actualización jerárquica está habilitada para todos los nuevos conjuntos de datos que se agregan o se crean en un proyecto. Active o desactive la actualización jerárquica estableciendo la propiedad Actualización jerárquica de un conjunto de datos con tipo en el Diseñador de DataSet en True o False. Para obtener información detallada, vea Cómo: Habilitar y deshabilitar la actualización jerárquica.

Restricciones FOREIGN KEY y actualizaciones y eliminaciones en cascada

Es importante saber cómo se crean las restricciones FOREIGN KEY y el comportamiento en cascada en la base de datos en el código del conjunto de datos generado.

De forma predeterminada, las tablas de datos en un conjunto de datos se generan con relaciones (DataRelation) que coinciden con las relaciones en la base de datos. Sin embargo, la relación en el conjunto de datos no se genera como una restricción FOREIGN KEY. DataRelation se configura como Sólo relación sin UpdateRule o DeleteRule en vigor.

De forma predeterminada, las actualizaciones y las eliminaciones en cascada están desactivadas, incluso si la relación de la base de datos establece que estén activadas. Por ejemplo, al crear un nuevo cliente y un nuevo pedido, e intentar a continuación guardar los datos, se puede producir un conflicto con las restricciones FOREIGN KEY definidas en la base de datos. Para obtener más información, vea Cómo: Configurar restricciones FOREIGN KEY en un conjunto de datos.

Establecer el orden para realizar actualizaciones

Al establecer el orden para realizar actualizaciones se establece el orden de las inserciones, actualizaciones y eliminaciones individuales exigido para guardar todos los datos modificados en todas las tablas de un conjunto de datos. Cuando la actualización jerárquica está habilitada, primero se realizan las inserciones, a continuación las actualizaciones y, por último, las eliminaciones. TableAdapterManager proporciona una propiedad UpdateOrder que se puede establecer para realizar primero las actualizaciones, a continuación, las inserciones y, por último, las eliminaciones.

Nota

Es importante entender que el orden de actualización incluye todo. Es decir, cuando se realizan las actualizaciones, las inserciones se realizan para todas las tablas del conjunto de datos, a continuación, se realizan las actualizaciones para todas las tablas del conjunto de datos y, por último, se realizan las eliminaciones para todas las tablas del conjunto de datos.

Para establecer la propiedad UpdateOrder, después de arrastrar los elementos de Orígenes de datos (ventana) a un formulario, haga clic en TableAdapterManager en la bandeja de componentes y establezca la propiedad UpdateOrder en la ventana Propiedades. Para obtener más información, vea Cómo: Establecer el orden al realizar una actualización jerárquica.

Crear una copia de seguridad de un conjunto de datos antes de realizar una actualización jerárquica

Cuando se guardan datos (llamando al método TableAdapterManager.UpdateAll() ), TableAdapterManager intenta actualizar los datos para cada tabla en una transacción única. Si se produce un error en cualquier parte de la actualización en cualquier tabla, se revierte la transacción entera. En la mayoría de las situaciones, cuando se revierte la transacción, la aplicación vuelve a su estado original. Sin embargo, a veces se decide restaurar el conjunto de datos a partir de la copia de seguridad. Un ejemplo sería cuando se usan valores de incremento automático. Por ejemplo, si el proceso de guardar la operación no es correcto, los valores de incremento automático no se restablecen en el conjunto de datos y el conjunto de datos continuará creando valores de incremento automático, dejando un vacío en la numeración que puede que la aplicación no admita. En situaciones donde éste es un problema, TableAdapterManager proporciona una propiedad BackupDataSetBeforeUpdate que reemplaza el conjunto de datos existente con una copia de seguridad si se produce un error en la transacción.

Nota

La copia de seguridad únicamente permanece en memoria durante la ejecución del método TableAdapterManager.UpdateAll. Por consiguiente, no habrá acceso mediante programación a esta copia de seguridad del conjunto de datos porque, o bien reemplaza el conjunto de datos original, o se queda fuera del ámbito en cuanto el método TableAdapterManager.UpdateAll termine de ejecutarse.

Vea también

Tareas

Tutorial: Guardar datos de tablas de datos relacionadas (actualización jerárquica)

Conceptos

Novedades en el desarrollo de aplicaciones de datos

Información general sobre TableAdapterManager

Otros recursos

Guardar datos

Actualización jerárquica