Archive for the 'Visual Basic .NET' Category

25
Jun
10

Entorno desconectado en VB.NET 2005

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, 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…

25
Jun
10

Entorno conectado en VB.NET 2005

Un entorno conectado es aquel en el que un usuario o una aplicación están conectados continuamente a una fuente de datos. Durante muchos años de la historia de la informática, el único entorno disponible era el entorno conectado

Ventajas:
  • El entorno es más fácil de mantener.
  • La concurrencia se controla más fácilmente.
  • Es más probable que los datos sean actuales que en otros escenarios.
Inconvenientes:
  • Debe tener una conexión de red constante
  • Escalabilidad limitada

He aquí algunos ejemplos en los que debe utilizarse una conexión continua:

  • Una fábrica que requiere una conexión en tiempo real para controlar la salida de producción y el almacén.
  • Un agente de bolsa que requiere una conexión constante a los valores del mercado

Ahora, de una forma sencilla y mediante un programita en VB.NET explicaré éste entorno conectado.

El formulario contine…

Objeto Nombre Valor Habilitado
Form form1 Conexión Si
Label lblUsuario Usuario Si
Label lblPasswd Contraseña Si
TextBox txtUsuario Si
TextBox txtPasswd Si
Button btnEntrar Entrar Si

Quedaría así…

Y la base de datos se llama Pruebas, con una tabla llamada tst_usuarios, la cual tiene los siguientes campos con sus respectivos valores:

Ahora que ya tenemos la base de datos y el formulario, vamos por el código…

Primero, importamos las librerías que nos permitirá conectarnos a la base de datos gracias al componente ADO.NET.

Imports system.Data.SqlClient

Luego, en la siguiente línea de código (dentro de la clase publica del Form1)  se declara la variable conexion como objeto SqlConnection, y se le asigna el String de conexión. El String de conexión consta de 4 parámetros básicos: Data Source (que es para indicarle el servidor de base de datos al que nos conectaremos, Initial Catalog (se le asigna la base de datos con la que se trabajará), User Id (Usuario de conexión) y Password (Contraseña del usuario con el que se conectará).

En la segunda línea, se declara una variable leer como un SqlDataReader, la cual será usada para procesar eficientemente una lista grande resultados, un registro a la vez.

Dim conexion As New SqlConnection("Data Source=.; Initial Catalog=pruebas; User Id=usuario; Password=123")
Dim leer As SqlDataReader

Dentro de la clase del botón btnEntrar, la primera línea se declara la variable query que contiene la sentencia SQL que verifica si lo que el usuario ingresa en el formulario (usuario y contraseña) se encuentra registrado en la base de datos.

Dim query As String = "select * from tst_usuarios where idusuario = '" & Me.txtUsuario.Text & "' and passwd = '" & Me.txtPasswd.Text & "'"

Se declara una variable comando como SqlCommand, que nos ayudará a realizar la acción en la fuente de datos, ya sea para lectura, actualización, borrado etc. En nuestro caso, lo usaremos para consulta. Se le pasa como parámetros (o atributos), la variable query (con la sentencia SQL) y la variable de conexión.

Dim comando As New SqlCommand(query, conexion)

Por si exista algún tipo de error, se manejarán dichos errores con Try Catch

Try

Se abre la conexión…

conexion.Open()

Se le asigna a la variable leer (tipo SqlDataReader) el resultado de la sentencia SQL por medio del ExecuteReader.

leer = comando.ExecuteReader

Se verifica si leer posee algún registro (que debería ser el registro del usuario que corresponde con el usuario y contraseña que ingresó el usuario final). Si tiene, se envía un mensaje de bienvenida. Si no tiene, es porque el usuario final ingreso mal el usuario o la contraseña.

If leer.Read Then
MessageBox.Show("Bienvenido al sistema", "Inicio")
Else
MessageBox.Show("Nombre de usuario o contraseña incorrectas", "Error")
Me.txtUsuario.Select()
End If

Se cierra el DataReader

leer.Close()

Se cierra el Catch, dejando un mensaje con el error específico que ocurrió si en caso sucede.

Catch ex As Exception
MsgBox(ex.Message)
Entd Try

Se cierra la conexión.

conexion.close()

El resultado al ejecutar el código es el siguiente:

Puedes descargar éste ejemplo aqui…