Entorno desconectado en VB.NET (Versión 2005 – 2010 probado)

Un entorno desconectado es aquel en el que un usuario o una aplicación no están conectados constantemente a una fuente de datos. Las aplicaciones de Internet utilizan frecuentemente arquitecturas desconectadas. Se abre la conexión, se recuperan los datos y la conexión se cierra. El usuario trabaja con los datos en el navegador y la conexión vuelve a abrirse para actualizar u otras
peticiones.

Los usuarios móviles que trabajan con equipos portátiles son también los usuarios principales de los entornos desconectados. Los usuarios pueden llevarse un subconjunto de datos en un equipo desconectado y posteriormente fusionar los cambios con el almacén de datos central.

Un entorno desconectado proporciona las siguientes ventajas:

  • Las conexiones se utilizan durante el menor tiempo posible, permitiendo que menos conexiones den servicio a más usuarios.
  • Un entorno desconectado mejora la escalabilidad y el rendimiento de las aplicaciones, maximizando la disponibilidad de conexiones.

Un entorno desconectado tiene los siguientes inconvenientes:

  • Los datos no siempre están actualizados.
  • Pueden producirse conflictos de cambios que deben solucionarse

Explicaré con un mantenimiento sencillo cómo podría aplicarse el entorno desconectado en una aplicación .NET, practicamente se usarán repositorios en memoria del lado del cliente (llamados DATASET) para poder almacenar los datos.

El formulario contiene…

Objeto Nombre Valor Habilitado
Form form1 Mantenimiento de Usuarios Si
Button btnNuevo &Nuevo Si
Button btnEditar E&ditar Si
Button btnEliminar &Eliminar Si
Button btnSalir &Salir Si
Label lblUsuario Usuario: Si
Label lblPasswd Contraseña: Si
Label lblNombres Nombres: Si
Label lblApellidos Apellidos: Si
TextBox txtUsuario Si
TextBox txtPasswd Si
TextBox txtNombres Si
TextBox txtApellidos Si
DataGridView dgvUsuarios Si

El formulario quedaría así…

Y la base de datos en SQL Server 2000 (o la que se tenga…), quedaría así…

Y finalmente el código…

Las primeras líneas son para importar las librerías requeridas.

Dentro de la clase del formulario (las primeras líneas), esta un bloque de código el cual explicaré… La primera, es para crear la variable de conexión (está más explicado en el post de Entorno conectado). La asegunda línea, se declara la variable dsUsuarios como objeto DataSet, la cual nos servirá para describir una simple base de datos relacional en memoria. La tercera línea es para declarar la variable daUsuarios como objeto SqlDataAdapter, el cual es como un «Puente» utilizado para transferir data entre una fuente de datos y un objeto DataSet. En la cuarta línea se declara una variable cbUsuarios como objeto SqlCommandBuilder, el cual es el responsable de generar las sentencias SQL necesarias para hacer las acciones de inserción, actualización y eliminación de registros. La quinta línea, se declara la variable sqlusuarios como string, el cuál posee la sentencia SQL respectiva para llenar el DATASET con la información que manejará éste formulario. Finalmente, la lína sexta, es una variable posicion del tipo entero que nos servirá más adelante para obtener la posición del índice dentro del DATASET.

El siguiente bloque de código va dentro de la clase Load del formulario. Primero, se limpia el dataset (por si tiene algo…), luego se pone la instrucción Try para poder controlar los errores. En la lína 3, se le asigna a la variable daUsuarios la instancia de la clase SqlDataAdapter, de tal forma que le asignamos como parámetros la sentencia SQL y la conexión. En la línea 4, llenamos el DATASET por medio de daUsuarios. En la lína 5, se instancía el objeto SqlCommandBuilder para que ya podamos realizar INSERT, UPDATE y DELETE automáticos desde el DATASET.

Continuando con el mism bloque de código… La siguiente línea sirve para especificarle al DataGrid View cuál será su orgíen de datos, y la otra línea es (Donde se hace referencia al Datamember) para decirle con qué tabla trabajará dentro del DATASET, dado que el DATASET es un repositorio de una o varias tablas. De ahí, las siguientes 4 líneas sirven para poder crear el vínculo entre los TextBox y el DataViewGrid, de tal manera que estan vínculados con el indice del DATASET. Se termina el Try catch, de tal forma que nos muestre un mensaje con cualquier error que pueda ocurrir y se finaliza éste bloque de código.

Ya terminamos con el bloque de código del LOAD, ahora irémos al bloque del botón NUEVO (btnNuevo). Aqui iré un poco más rápido ya que hay muchas cosas que son cuestión de estética. Por ejemplo, se hace un IF para poder determinar si el botón esta en modalidad «Nuevo» o en modalidad «Guardar». Si esta en Nuevo, éste hará varias cosas de estética pero la línea importante de éste bloque es: BindingContext(dsUsuarios, «Usuarios»).AddNew() -> Ésta línea lo que hace es iniciar un registro nuevo en el DATASET y todo el formulario se centrará en éste registro.

Si en caso, el botón tiene como propiedad Text «&Guardar», lo que hará es ejecutar el bloque de código que esta después del Else y explicaré una a una cada línea de éste bloque:

BindigContext(dsUsuarios, «Usuarios».EndCurrentEdit() -> Se detiene la edición del registro, ya sea si se esta insertando uno nuevo o se esta editando alguno.
daUsuarios.Update(dsUsuarios, «Usuarios») -> Se actualiza ésta información en el DATASET.
dsUsuarios.Tables(«Usuarios»).AcceptChanges() -> Se aceptan los cambios y se actualiza dicho (o dichos) registro/s en la base de datos. Del DATASET hacia la Base de datos.

De ahí para haya solo es cuestión de estética y se finaliza con el Try catch, siempre de tal forma que nos envíe un mensaje por cualquier error.

El siguiente bloque de código que estudiarémos es el del botón Editar (btnEditar). Como el botón Nuevo, éste tiene dos modalidades… Si su propiedad Text es «E&ditar» o «&Cancelar». Si se llama «E&ditar», se ejecutan unas instrucciones de solo estética, pero si se llama «&Cancelar», se ejecuta un bloque de código en donde la única línea interesante es:

BindingContext(dsUsuarios, «Usuarios).CancelCurrentEdit() -> Con ésto, se cancela la edición o inserción del registro en el DATASET.

Lo demás del código solo es estética y la terminación del Try catch.

El siguiente bloque de código que se estudiará es el que esta en el botón Eliminar (btnEliminar). Aqui, se inicia el Try y luego, en la segunda línea, se puede ver que se le asigna a la variable posicion (integer) la posición actual en donde se encuentra el DATASET (o sea, el número de registro en donde esta apuntando). Las siguientes líneas la veremos una a una.

dsUsuarios.Tables(«Usuarios»).Rows(posicion).Delete() -> Cón ésta instrucción, se marca como que dicho registro (registro actual, encontrado por la variable posición) será eliminado.
daUsuarios.Update(«Usuarios», «Usuarios») -> Se elimina el registro del DATASET.
dsUsuarios.Tables(«Usuarios»).AcceptChanges() -> Se aceptan los cambios de tal forma que se actualicen en la base de datos. O sea, el registro eliminado en el DATASET será eliminado también en la base de datos.

El resto del código practicamente no es interesante, pero ya ejecutado el programa, dará algo así como resultado:

Si desea descargar éste ejemplo, dar clic Aqui…

Comentarios por Facebook

comentarios

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*