martes, 1 de abril de 2008

Ds - Dt vs2005 - Capa Dato

DataSet/DataTable tipados y Table Adapter con Visual Studio 2005 y 2008
Introducción- Data Label- Capa de Datos- Capa de Negocios- UI Interfaz


Bueno amigos, la creación de la capa de datos en esta aplicación es muy simple, ya que como tenemos todo montado en la Base de Datos, que para mi opinion, crear las consultas y transacciones en la base de datos es mucho mejor que crear las consultas en la solución, es decir, en esta capa, es mucho mejor.

Por que digo esto, por la sencilla razón de que cuando definimos las consultas y transacciones en procedimientos almacenados y funciones, tenemos una precomplicación de las mismas y lo único que le queda al motor de base de datos, es ejecutar estas sin tener que hacer un analisis, lexico, sintaxico y semantico (lo explican en la uni cuando pasan sql (es lo básico)). Esto no quita que en algunas ocaciones, por motivos de portabilidad de las aplicaciones entre distintos motores de bases de datos, se opte por hacerlo en la capa de datos correspondiente, pero esto está amarrado a la posibilidad de distintos motores. En el caso de que trabajemos con un solo motor de base de datos, saquemosle el máximo de provecho a las herramientas y pasemos las cargas donde corresponden. Los pasos a seguir para crear nuestra Capa de Datos va a ser la siguiente:



Primero Crearemos un nuevo proyecto de vs2005 o vs2008, para los dos casos los pasos son los mismos. ir a Archivo/Nuevo/Proyecto y seleccionar una aplicación de windows que en este caso será una Biblioteca de Clases, como se muestra en las 2 siguientes imágenes.





Definiremos como nombre del proyecto CapaDato y como nombre de la solución WinApp. A continuación, borraremos la clase que se crea por defecto en el proyecto de bibliotecas de clases y seleccionaremos con el botón derecho del ratón, sobre el nombre del proyecto la opción Agregar/ Nuevo item, en donde se desplegará la ventana que presentará la opción de selección. En esta ventana seleccionaremos la plantilla DataSet, a la cual llamaremos dsUsuario.


Llevado a cabo este paso, ahora el siguiente paso será tipar el dataset, para ello, desde el explorador de servidores, crearemos una conexión al motor de bases de datos y a la Base de Datos en específico que deseamos utilizar para mapear. Abriremos el nodo de conexión y seleccionaremos, en este caso las tablas que deseamos utilizar, arrastrándolas al diseñador definido. Al terminar la acción el DataSet quedará de la siguiente forma:


Si observamos, podremos ver que las estructuras de entidades mapeadas han creado los campos y han creado por defecto un método Fill y otro de tipo GetData. El método Fill por defecto cargará la información de una consulta a un DataTable perteneciente a un dataset que contenga la estructura definida y, el método GetData realizará lo mismo, pero solo retornará un DataTable con el resultado. Estos métodos si se ejecutan retornan toda la información que contiene la tabla en la Base de Datos.


Si se observa, estos métodos están definidos en una sección denominada TableAdapter, por lo cual, no tenemos que crear un Adapter para cargar la información a un DataSet o a un DataTable como lo haciamos en 2003, todo a quedado mapeado y el diseñador nos ha hecho estos métodos por defecto. Ver siguiente figura.

El siguiente paso será asociar nuestros procedimientos a nuestro TableAdapter, para ello deberemos crear unas nuevas consultas de transacciones, para ello nos posicionaremos sobre el table adapter y seleccionaremos con el botón derecho del mouse la opción agregar consulta, como se muestra en la siguiente imagen.


Esto nos habrirá la herramienta de diseño que nos permitirá definir que deseamos hacer.

  • La primera nos permite crear consultas sql que estarán en nuestra capa de datos, estas consultas pueden ser de Insert, Update, Delete y de consultas.
  • La segunda opción nos permite crear procedimientos almacenados en nuestra Base de Datos, directamente.
  • La tercera opción, nos permite consumir los procedimientos almacenados que hemos construído con anterioridad. Un buen diseñador de arquitectura trabaja de esta forma

Ver figura


Al seleccionar la opción de usar procedimientos almacenados , nos desplegará una lista con todos los procedimientos almacendados disponibles en la base de datos, como se muestra en la siguiente figura.




Para realizar el ejemplo, seleccionaremos el procedimiento prcUsuarioListar, el cual al ser seleccionado, desplegará en pantalla los datos que solicita para ser ejecutado correctamente. Al seleccionar la opción siguiente prodremos observar que se despliegan tres opciones.

  • Desplegar la información en filas y columnas.
  • Entregar solo un resultado
  • No retornar valor

Cuando ejecutamos una consulta que retorna una select en un procedimiento almacenado deberemos seleccionar la primera opción, en el caso de que solo deseemos ejecutar un procedimiento que haga algo y debamos controlar un retorno de datos, es decir, 0 o 1 como en nuestros procedimientos de actualización, modificación y eliminación, seleccionaremos la segunda opción. Para el procedimiento seleccionado ejecutaremos la primera opción.


El siguiente paso es definir los métodos Fill y GetData que utilizaremos para la carga de datos de un DataTable dentro de un DataSet o un DataTable, si vamos a retornar solo las filas, solo debemos utilizar un DataTable, para ello solo definiremos que solo utilizaremos DataTable.


Para nuestro ejemplo, solo utilizaremos DataTables y verán que con esta filosofía casi siempre se usa solo la segunda opción, ya que las modificaciones se realizan directamente a la Base de Datos y no se utiliza un DataSet de por medio para modificar y ejecutar el metodo Update del mismo.




Al generar el nuevo método veremos que la sección de Table Adapter cuenta con dos nuevos métodos que retornarán la misma información de dos formas de llamada y carga distintos DataSet y DataTable o DataTable solamente.



Los procedimientos de inserción, modificación y eliminación, retornarán un solo valor 0 o 1, por lo cual no se crean métodos Fill y/o GetData, esto se puede observar en la siguiente figura.



El ultimo paso y el más importantes es el de generación, con el cual se generarán los controles que podremos utilizar desde el cuadro de herramientas cuando creemos los objetos desde la Capa de Negocios.



Bueno como ven, cuando una plicación se encuentra bien diseñada podremos trabajar muy rapidamente en esta capa.




No dejen de lado el trabajar Orientado a Objetos, les facilita la programación, pero la programación OO depende del Análisis y Diseño. Si el análisis y Diseño no esta orientado a Objetos, aunque sean unos muy buenos programadores, nunca podrán desarrollar un diseño que no esta orientado a objetos, esto dará como resultado algo a "medio morir saltando" (chilenismo).

2 comentarios:

Jeffry Lewis Reid dijo...

en la ultima parte hablas sobre la generacion de controles, a utilizar en el cuadro de herramientas ??, como se realiza este paso..

Muchas gracias

Anónimo dijo...

Muy facil amigo mio, te posicionas el puntero del raton sobre el proyecto de capa de datos, seleccionas el botón derecho del ratón y luego seleccionas gererar, cuando crees tu capa de negocio con una clase de componentes, verás el el cuadro de herramientas que se han creado los controles dataset y tableadapter.

Un saludo.

PD. Me demoro al responder por que trabajo!!!!