Índice de la sección dedicada a .NET (en el Guille)

Utilidad para generar clases para acceder a una tabla

Esta utilidad la puedes usar para generar clases (en VB o C#) con el contenido de una tabla de una base de datos de Access o SQL Server

Actualizado: 23/Jul/2004
Autor: Guillermo 'guille' Som

Volver al índice de Generar clases para acceder a una tabla

 
 

La utilidad para generar las clases a partir de una tabla

Como te comentaba en la página de introducción, para generar las clases a partir de una tabla de una base de datos, vamos a usar una librería que será la que realmente hará el trabajo de la conversión, pero para que esa librería sepa que es lo que tiene que hacer, necesitaremos una aplicación que recopile la información que necesitamos para poder generar las clases, además de poder guardar el código generado en un fichero con la extensión del lenguaje que hemos elegido.

Veamos el aspecto de la aplicación en ejecución y después veremos algunos detalles.

 


Figura 1: La utilidad en ejecución

 

Tal como podemos ver en la figura 1, la utilidad se divide en varias partes, en la parte superior tenemos dos grupos para indicar la base de datos de la que queremos sacar la información.

El grupo superior nos servirá para una base de datos de Access y la información que necesitamos es:
-Base de datos: El nombre de la base de datos, para seleccionar una, podemos usar el botón Examinar o bien arrastrar y soltar el fichero de la base de datos que queremos usar.
-Provider: La cadena para acceder al proveedor de la base de datos, la que está indicada de forma predeterminada es la que normalmente necesitaremos.
-Password: Si la base de datos está protegida con una contraseña (password), lo indicaremos aquí, en otro caso lo dejaremos en blanco.

El siguiente grupo es para poder acceder a una base de datos de SQL Server, la información que podemos proporcionar es:
-Data source: La conexión a la base de datos. De forma predeterminada está la que podemos usar para las bases de datos instaladas con el Visual Studio .NET, pero puedes usar la que necesites.
-Initial catalog: Es la base de datos en la que está la tabla de la que quieres crear una clase.
-Usar seguridad de SQL: Marca esta opción si quieres usar la seguridad de SQL Server, en ese caso tendrás que indicar el nombre (o ID) de usuario y la contraseña (password). Si esta opción no está seleccionada, se usará las credenciales de Windows.

Una vez que hemos indicado la base de datos que vamos a usar, podemos obtener las tablas que contiene, para mostrarlas puedes pulsar en el botón Mostrar tablas y una vez hecho, (si no hay error), se llenará el combo (o lista desplegable) que está a la izquierda del botón.
La Cadena select será la cadena de selección de los datos, pero no es necesario escribir nada, ya que cada vez que seleccionemos una tabla se modificará el contenido. Aunque si podemos escribir lo que queramos antes de pulsar en el botón Generar Clase ya que el contenido de esa caja de textos se utilizará para acceder a los datos de la tabla. Por tanto si quieres que se haga algún tipo de filtro sobre los datos obtenidos de la tabla, puedes hacerlo antes de generar la clase.

Como te comentaba en la página de introducción, para los métodos Actualizar, Crear y Borrar se genera el código tanto para usar un objeto CommandBuilder (OleDbCommandBuilder o SqlCommandBuilder según el tipo de base de datos) como los comandos UPDATE, INSERT y DELETE que se necesiten, y debido a que cada uno de esos métodos solamente realizará una de estas tres acciones el código generado en cada método será el que le corresponda, además de crear los parámetros correspondientes para el objeto Command creado. Debido a que no se van a usar las dos formas de modificar los datos, una de estas dos formas se comentará.
Con la opción usar CommandBuilder puedes indicar si quieres que el código "no comentado" sea el que utiliza un objeto CommandBuilder o bien el que usa los comandos correspondientes.

Finalmente para indicar si el código a generar va a ser para Visual Basic o para C#, tendrás que seleccionar la opción correspondiente y finalmente pulsarás en el botón Generar Clase para crear el código.
Una vez creado el código (y si no se ha producido ningún error) éste se mostrará en la caja de textos grande, el cual podemos guardar en un fichero que tendrá el mismo nombre de la tabla pero con la extensión adecuada según el lenguaje seleccionado (.vb o .cs), si pulsamos en el botón Guardar.

 

Debido a las restricciones que tiene C# (que VB no tiene), hay que tener cuidado con el nombre de la clase, ya que en C# una clase no puede contener propiedades, métodos o campos que tengan el mismo nombre de la clase.
¿Por qué digo esto?
Porque a mi me ha ocurrido que tengo una tabla llamada Usuario que contiene una columna (campo) que también se llama Usuario, por tanto en C# no puedo crear esa clase con ese nombre, porque el constructor de la clase es un método (o casi) que se llama de la misma forma que la propia clase, por tanto entraría en conflicto con una propiedad llamada igual. Mientras que en Visual Basic eso no da problemas, ya que el constructor de la clase es un método llamado New, con lo cual ese inconveniente no se presentará.
En la versión que actualmente estoy distribuyendo ese "detalle" no se tiene en cuenta por la librería encargada de genera el código ni por esta utilidad. Aunque es posible que lo haga para evitar posibles "contratiempos". Y seguramente lo haré en esta utilidad, ya que lo que se me ocurre, (estoy pensando en voz alta por si lo quieres hacer por tu cuenta), es obtener las columnas (campos) de la tabla seleccionada y comprobar si hay alguna que tenga el mismo nombre que el indicado para la clase.

 

Dependencias de esta utilidad:
Qué librerías necesita y más cosas que tendrás de forma indirecta

Esta utilidad necesita, además del .NET Framework y el ADO 2.6 o superior, la librería de generar las clases (elGuille.Data.CodeGenerator.dll) y otra librería (elGuille.Util.dll) que es la que uso para manejar ficheros "personalizados" de configuración. Esta última se usa para acceder a la clase eIni que sirve para leer y guardar ficheros de configuración en formato XML, además de usar la clase cApp para saber la versión del ejecutable, etc.
Las dos librerías están firmadas con nombre seguro (strong name) por tanto puedes alojarla en la caché de ensamblados global (GAC) por si posteriormente usas algunas otras utilidades que yo pueda publicar.

Porque los datos que selecciones en esta utilidad, se guardarán en un fichero llamado crearClasesVB.exe.cfg que estará en el mismo directorio del ejecutable, el cual podrás modificar manualmente si así lo deseas, pero recuerda que el formato (o codificación) usada para guardarlo es UTF-8.
En ese mismo directorio del ejecutable será donde se guarden las clases generadas por la aplicación.

Más detalles sobre el contenido de la librería de generar las clases los puedes encontrar en la página "La librería que genera el código".

 

El lenguaje en el que está escrito esta utilidad

Esta utilidad la he hecho en Visual Basic, pero también publicaré el código de C#, por si te gusta más trabajar con ese lenguaje o por si te sientes más cómodo escribiendo puntos y comas a mansalva... je, je, je. No te mosquees que es broma...

 

El código de la utilidad

El código no es demasiado complicado, ya que como se basa en la librería, todo el trabajo "sucio" lo hace dicha librería, de hecho esta utilidad no tiene ninguna importación a los espacios de nombres de acceso a datos, ya que todo el tema de conexión y obtención de las tablas, etc., se hace por medio de las clases incluidas en la librería.

Aquí te dejo los links al código tanto de Visual Basic como de C#, que estarán en páginas separadas para que no "abulte" demasiado.
También te pongo el link a las clases generadas tanto para VB como para C# a partir de la tabla authors de la base de datos pubs para que veas cómo quedaría el código generado automáticamente.
Estas clases (o las que generes por tu cuenta) las puedes usar con la utilidad para probar las clases generadas, ejemplo que he hecho (en VB y C#), en la que además encontrarás un "truquillo" interesante que te permitirá crear las cajas de textos necesarias para cada uno de los campos de la tabla además de poder hacer dentro de un bucle las asignaciones a los campos de la clase...

 

El código y el ejecutable en formato zip
(para que puedas conseguirlo de forma fácil)

Este link contiene el código de esta utilidad, además de el ejecutable (compilados con la versión 1.1 del .NET Framework) y las dos librerías usadas:

Link Nombre Tamaño Fecha del zip
El código para Visual Basic
 
crearClasesVB_src.zip 12.2 KB 14/07/2004 04:41
El código para C#
 
crearClasesCS_src.zip 13.4 KB 14/07/2004 04:41
Los ejecutables
(el de C# y el de VB, aunque una vez compilados lo mismo da...)
 
crearClases_bin.zip 25.9 KB 14/07/2004 10:14
La librería elGuille.Data.CodeGenerator
 
elGuille.Data.CodeGenerator.zip 17.5 KB 14/07/2004 10:13
La librería elGuille.Util
 
elGuille.Util.zip 14.1 KB 14/07/2004 04:51

 

Bueno, pues espero que te sea realmente útil y, si encuentras mejoras o algún bug, por favor no dudes en decírmelo. Gracias

Nos vemos.
Guillermo

Nota del 07/Mar/08:
El código fuente de esta utilidad, (y la DLL que genera el código), con algunas modificaciones y adaptado a Visual Basic 2005, lo puedes bajar desde Codeplex, para más información, lee esto que publiqué el 4 de Mayo de 2007.

 


la Luna del Guille o... el Guille que está en la Luna... tanto monta...