Curso de ASP NET 2.0 Avanzado

Trabajar con varias tablas.

Hasta ahora hemos visto como crear una tabla y como darle datos para vincularlo a un control de servidor que mostrara los datos. Hemos creado las columnas y le hemos dados sus propiedades, incluso teniendo la posibilidad de configurar una columna como clave primaria.

Como puedes ver en el siguiente gráfico, tenemos varias tablas en un mismo DataSet:

Parece que hemos ido cumpliendo con la idea de que un DataSet es una base de datos virtual que se encuentra en memoria. Pero, una base de datos puede estar formada por varias tablas, y estas tablas se pueden relacionar entre ellas para evitar la redundancia  de datos.

Si te has fijado, en el anterior ejemplo, no hemos creado ningún DataSet, no ha sido necesario ya que únicamente hemos creado una tabla, sin necesidad de crear relaciones, ni de vincularla a una fuente de datos. Pero si queremos trabajar con varias tablas relacionadas, lo que debemos hacer es empaquetarlas en un DataSet.

Una vez que tenemos las tablas creadas, con sus columnas correctamente configuradas, y las hemos empaquetado en un DataSet, podemos añadir un nuevo objeto al DataSet que se encargue de mantener las relaciones entre las tablas.

En el siguiente ejemplo, hemos añadido un segundo DataTable con los siguientes campos y propiedades:

Columna Descripción
codProveedor Columna configurada como única y clave primara para distinguir cada uno de los proveedores.
codElemento Columna que relacionaremos con la columna codigo del DataTable elementos.
Nombre Nombre del proveedor.
Apellidos Apellidos del proveedor.

Por lo tanto tendremos dos tablas, la tabla elementos y la tabla proveedores que relacionaremos mediante los campos "codigo" de la primera (clave primaria) y la columna "codElemento" de la segunda (clave foránea).

El resultado que estamos buscando es el siguiente:

Hemos mostrado debajo de las tablas mostradas mediante el control GridView, dos etiquetas.

La primera (Label1) es la encargada de ir mostrando los proveedores que han vendido el "Elemento 0" con codigo = 1.

Mientras que la segunda, muestra el elemento que ha vendido el proveedor "Juan".

A continuación te muestro el código completo de este ejemplo:

En el fichero Default.aspx, simplemente hemos añadido un nuevo GridView encargado de mostrar el DataTable miTabla2, y dos etiquetas para mostrar los datos relacionados que hemos comentado:

En Default.aspx.vb hemos añadido la tabla del ejemplo anterior a un DataSet (objDS) y hemos añadido otra tabla más (miTabla2) a este mismo DataSet, al dar valores las filas de esta nueva tabla, hemos tenido especial atención a la columna codEmpleado para darle valores coincidentes con la columna codigo de la primera tabla. No te asustes por el tamaño del código, simplemente cuenta de 3 partes.

  1. Creación de objetos DataTables.
  2. Relacionar las dos tablas mediante un DataSet.
  3. Mostar las filas de una tabla a partir de datos de otra tabla, gracias a la relación.

La primera parte de la creación de las tablas está suficientemente aclarada, simplemente es repetir el primer ejemplo para una segunda tabla, teniendo cuidado de crear correctamente la clave principal de la primera tabla y dar valores coherentes para permitir la relación, además de añadir ambas tablas al DataSet en el momento de ser creadas.

En la segunda parte hemos creado un objeto Relation añadiéndolo al DataSet, para enlazar ambas tablas:

Para añadirlo simplemente hemos dado un nombre a la relación para poder identificarla posteriormente, el segundo valor es la clave primaria de la primera tabla que vamos a relacionar, el tercero indica la clave foránea (será la tabla donde los datos podrán estar repetidos) y por último indicamos que al crear la relación compruebe que los datos introducidos cumplen con los requisitos de la relación, es decir que no tengamos un proveedor con un código de elemento inexistente, si fuese así lanzaría una excepción y no crearía la relación:

Seguido hemos almacenado en un objeto DataRow, las filas que se encuentran relacionadas para un determinado elemento, en este caso la tabla Padre (parent) es la que contiene la clave principal (miTabla) y la tabla hijo sería la que contiene la clave foránea (miTabla2).

Es lógico que utilicemos un bucle para recorrer el número de filas encontradas en la relación, recuerda que la tabla con clave foránea puede tener varias filas coincidentes con la clave primaria:

Por último mostramos en la segunda etiqueta aquel elemento de la tabla padre (miTabla) que se encuentra vinculado a un determinada proveedor de la tabla hijo (miTabla2). Lógicamente ahora no utilizamos ningún bucle para recoger los datos, ya que estamos accediendo a una fila cuyo valor de  clave primaria lo hará única, este valor de clave primaria, nos la devuelve uno de los valores de la clave foránea codEmpleado de la tabla de proveedores (miTabla2).


Inscríbete ahora y accede a 3 unidades gratis

Evalua el curso de ASP NET 2.0 Avanzado y accede a las 3 unidades gratis con acceso completo al aula virtual donde podrás disfrutar de la inestimable ayuda del tutor y una gran variedad de recursos como videotutoriales, ejercicios resueltos, foros, enlaces, bibliografía, etc....


Si desea obtener un acceso sin restricciones a los contenidos del curso de ASP NET 2.0 Avanzado y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.