Sunteți pe pagina 1din 48

Gua de Desarrollo de Aplicaciones C# .

NET y MySQL
Sorey Bibiana Garca Zapata http://soreygarcia.blogspot.com

Requisitos de conocimiento: Para iniciar este curso usted debe conocer sentencias bsicas de C# .NET y poseer conceptos bsicos de bases de datos. Adems se requiere tener la contextualizacin necesaria en aplicaciones distribuidas dada en la presentacin http://www.slideshare.net/soreygarcia/aplicacionesdistribuidas-presentation Requisitos tcnicos: Tener instalado Visual Studio .NET 2005.

1. Construyendo la base del proyecto


Suponga el siguiente Diagrama de Paquetes:

De acuerdo a la teora vista debemos crear los componentes representados en este Diagrama de Paquetes, teniendo en cuenta que: Ejercicio.Escritorio es una Aplicacin WinForms Ejercicio.LogicaNegocio es una Librera de Clases Ejercicio.ObjetosNegocio es una Librera de Clases Ejercicio.AccesoDatos es una Librera de Clases Ejercicio.ServicioWeb es un WebService ASP.NET Ejercicio.Web es un Sitio Web ASP.NET

Recuerde: Este diagrama nos definir las vas de comunicacin entre componentes, solo los componentes relacionados entre s pueden comunicarse, la direccin de la lnea indicar que proyecto usa a cual proyecto, por ejemplo Ejercicio.Escritorio usa las clases del paquete Ejercicio.ObjetosNegocio. Es importante que tenga en cuenta que esta relacin no es Bireccional, por lo cual Ejercicio.ObjetosNegocio no ve las clases de Ejercicio.Escritorio. Ahora bien, procesamos a su creacin sobre Visual Studio .NET 2005 con C# .NET.

Instrucciones
1. Abra el Visual Studio .NET 2005

Recuerde que en Windows Vista usted debe ejecutar el Visual Studio en modo administrador para que funcione correctamente.

2. Cree un nuevo proyecto

3. Cercirese de que el Lenguaje C# se encuentra seleccionado y elija una Aplicacin WinForms.

Recuerde: Este es el primer proyecto (Paquete, Componente) y con l se crean la solucin que a agrupar los dems proyectos, por lo que es importante que verifique muy bien en como asigna el nombre de la solucin y que deja seleccionada la opcin de crear directorio para la solucin.

4. Al presionar el botn

usted ver lo siguiente.

Esta imagen muestra la Jerarqua de la Solucin. La raz es Ejercicio y su primer proyecto es Ejercicio.Escritorio. Este proyecto nos muestra la clase Program.cs a travs de la cual se indica cual es la primera ventana que de ejecutar en el proyecto as:

Repasando un poco los conceptos bsicos lo que vemos en este archivo es: La referencia a las los namespaces contenidos en las libreras que usa el archivo Program.cs

La declaracin del namespace Ejercicio.Escritorio

Recuerde: Los namespace son agrupaciones lgicas de las clases.

La declaracin de la clase Program, contenida en el namespace Ejercicio.Escritorio

La declaracin del punto de entrada del proyecto Ejercicio.Escritorio, como mtodo de la clase Program.

Recuerde: Un proyecto solo puede tener un solo punto de entrada. El punto de entrada de un proyecto tipo ejecutable (Consola o Winforms) siempre ser un mtodo llamado Main.
En la siguiente lnea Se indica cual es la forma que iniciar la aplicacin en este caso es Form1. 5. Ahora crearemos el proyecto de Lgica de Negocio. Damos click derecho sobre la solucin en el Explorador de soluciones y agregamos un nuevo proyecto.

6. Elegimos

el

tipo

Class

Library

(Librera

de

Clases), .

le

asignamos

el

nombre

Ejercicio.LogicaNegocio y presionamos el botn

Hagalo usted mismo! Agregue los dems proyectos tipo Librera de Clases, Ejercicio.ObjetosNegocio y Ejercicio.AccesoDatos.

7. Si a realizado correctamente el paso anterior, en el Solution Explorer (Explorador de Soluciones) ver el siguiente rbol.

8. Del mismo modo en que se agregaron las Libreras de Clase agregaremos un nuevo proyecto para la aplicacin web, Ejercicio.Web. Esta vez seleccionaremos el tipo de proyecto ASP.NET Web Application.

9. Agregamos el proyecto para el servicio web Ejercicio.ServicioWeb, seleccionando esta vez el tipo de proyecto ASP.NET Web Service Application.

10. Para completar las instrucciones que da el diagrama de paquetes, debemos agregar las relaciones entre los proyectos, es decir las referencias. Veamos nuevamente el diagrama de paquetes.

11. El proyecto Ejercicio.Escritorio tiene una referencia al proyecto Ejercicio.ObjetosNegocio. Para aadirla hacemos click derecho sobre la carpeta de referencias del proyecto que tiene la referencia es decir Ejercicio.Escritorio, y seleccione la opcin aadir una referencia:

12. En la nueva ventana que aparece seleccionamos el tab Projects (Proyectos) y elegimos el proyecto que se va a referenciar, es decir Ejercicio.ObjetosNegocio y presionamos el botn .

13. Este tipo de referencias se agregan cuando necesitamos que un proyecto de cualquier tipo pueda usar las clases contenidas en un proyecto de tipo Librera de Clases. Sin embargo para que los proyectos Ejercicio.Escritorio y Ejercicio.Web puedan referenciar al proyecto Ejercicio.ServicioWeb se deben seguir los siguientes pasos. 14. De click derecho sobre la carpeta de referencias de alguno de los proyectos que referenciar al servicio web y seleccione la opcin agregar una referencia web.

15. En la nueva pantalla que aparece seleccione la opcin servicios web en esta solucin.

Recuerde: Esta instruccin se sigue solo cuando estamos desarrollando locamente. Cuando un proyecto de esta naturaleza es implementado en un ambiente de produccin debe indicarse la ruta donde se encuentra publicado el servicio web.

16. Despus se vern los servicios web contenidos dentro del proyecto.

17. En nuestro caso tenemos Service1 que es el que el proyecto crea por defecto al ser aadido a la solucin, a modo de ejercicio, continuaremos con la creacin de la referencia. Damos click al nombre del servicio Service1 y veremos como carga muestra los mtodos que contiene, en nuestro caso es el mtodo por defecto HelloWorld.

18. Cambiamos el nombre localhost del campo nombre de referencia web (Web reference name) y all colocamos el nombre de la referencia. Por el momento usaremos el nombre Ejercicio.ReferenciaWeb, despus de ingresarlo presionamos el botn .

19. Cuando la referencia se agrega en el explorador de soluciones podemos observar como se ha agregado una carpeta de referencias web que contiene dentro lo que llamaremos un Proxy, con el nombre que indicamos a la referencia web.

Hagalo usted mismo! Agregue las referencias y referencias web que hacen falta para completar el diagrama de paquetes.

2. Construyendo el acceso a datos


Usaremos para nuestro ejercicio una base de datos sobre MySQL, por lo cual debemos descargar los siguientes componentes e instalarlos. Servidor de Base de Datos de MySQL 6.0 http://dev.mysql.com/get/Downloads/MySQL-6.0/mysql-6.0.10-alpha-win32.msi/from/pick Conector .NET para MySQL http://dev.mysql.com/get/Downloads/Connector-Net/mysql-connector-net-5.0.9.exe/from/pick Herramientas Graficas para Administracin de la Base de Datos MySQL http://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-gui-tools-5.0-r17-win32.msi/from/pick Importante: Debe registrarse para poder realizar estas descargas. Cuando haya realizado las descargas realice las instalaciones. Importante: Cuando esta instalando el Servidor de Base de Datos, se le solicitar una contrasea para el usuario administrador. Ingrese la contrasea deseada y NO LA OLVIDE. Reinicie el Visual Studio 2005 despus de la instalacin del Conector .NET para MySQL, para que pueda aadir las referencias correctamente. Despus de que todos los instaladores sean ejecutados exitosamente, inicie el programa que permite la administracin de las bases de datos de MySQL.

Cuando el programa se inicia solicita los datos para conectar al servidor, ingrese los que se indican a continuacin acompaados de la contrasea que ha configurado durante la instalacin y presione el botn .

Al ingresar en la aplicacin seleccione la opcin Catalogs y de click derecho sobre la lista que aparece en la parte inferior, seleccionando la opcin Crear Nuevo Esquema (Create new schema).

Cuando la aplicacin se lo solicite ingrese el nombre del esquema o base de datos nueva.

El nuevo esquema aparece en la lista de catalogos. De click derecho sobre el nombre del nuevo esquema creado y seleccione la opcin Crear Nueva Tabla (Create New Table).

Cree la tabla tblUsuario siguiendo la imagen que se presenta a continuacin y al terminar oprima el botn .

La aplicacin nos solicitar que confirmemos la creacin de la tabla, all oprimimos el botn y luego el botn .

Verificamos que la tabla ha sido creada.

Ahora bien, lo importante en el desarrollo por capas es delegar responsabilidades a cada una de las capas, componentes y clases que hacen parte del sistema. A partir de este momento construiremos el componente encargado de conectarse a la base de datos y manipular los datos. El proyecto encargado de estas responsabilidades es Ejercicio.AccesoDatos. Empezaremos por borrar la clase por defecto que tiene el proyecto.

Cuando se nos pida confirmacin presionamos el botn

Ahora agregaremos un nuevo elemento

Este nuevo tem, ser de tipo Class (Clase) y lo llamaremos AccesoDatos.

Debe tenerse en cuenta que la extensin .cs, debe conservarse. Ahora bien, de la misma forma aadiremos otra Clase llamada ManejoDatos.cs. Al terminar el proyecto Ejercicio.AccesoDatos debe verse de la siguiente forma.

La clase AccesoDatos tendr la responsabilidad de hacer mtodos genricos para acceder a la base de datos, tales como: Conectarse, Desconectarse, Ejecutar Operaciones, Consultar Datos. Para que esto sea posible debemos aadir una referencia en el proyecto Ejercicio.AccesoDatos del conector de .NET para MySQL.

En el tab NET buscamos MySql.Data y presionamos el botn

Revisamos que en efecto la referencia fue agregada a la carpeta de referencias del proyecto

A continuacin agregamos a la clase AccesoDatos un objeto de tipo Conexin del esquema de ADO.NET que implementa el Conector .NET de MySQL

Vemos como aparece una linea vinotinto bajo el objeto conexin debido a que aun el archivo donde esta la clase AccesoDatos, no conoce el namespace donde este se encuentra. Presionamos la linea y seleccionamos el namespace al que pertenece.

Al seleccionarlo el using correspondiente se ubica en la parte superior del archivo y el nombre de la clase que corresponde al tipo del objeto conexin, se muestra en color verde claro.

Luego de esto, declaramos el constructor de la clase, as

Recordamos que el constructor tiene el mismo nombre de la clase y no tiene parmetro de retorno, adems le agregamos un parmetro de entrada a travs del cual configuraremos luego la cadena de conexin a la base de datos.

Adems, en el constructor inicializamos el objeto conexin configurndolo con la cadena de conexin que se recibir como parmetro. Las cadenas de conexin para cualquier base de datos la podemos encontrar en la pgina http://www.connectionstrings.com/ Ahora vamos a declarar dentro de la clase y debajo del constructor, el mtodo conectar.

Debemos recordar colocar la conexin dentro de un bloque try catch con el fin de poder controlar si un error ocurre al momento de conectarse a la base de datos. Recordamos adems que la expresin throw nos sirve para relanzar la excepcin. Ahora declaramos el mtodo desconectar.

Para desconectarnos, cerramos la conexin y destruimos el objeto conexin. Declaramos el mtodo Consultar que nos va a retornar un DataTable

Como el DataTable no se encuentra referenciado nuevamente saldr la linea vinotinto que ya sabemos como usar. El mtodo consultar debe tener la siguiente estructura, para ejecutar sentencias de tipo consulta que no tengan parmetros.

Podemos agregar una sobre carga para ejecutar consultas que tengan parmetros as.

Ahora declaramos el mtodo necesario para ejecutar operaciones (insertar, actualizar y borrar) sin parmetros.

Y aadimos la sobrecarga que podr ejecutar sentencias de modificacin de datos, con parmetros.

Cuando todos los mtodos estn listos, si los minimizamos, la clase debera quedar de la siguiente manera.

Es importante que se establezca esta clase como interna, para que no pueda ser accedida desde fuera del proyecto, ya que solo la clase ManejoDatos puede conocerla. Ahora crearemos la clase ManejoDatos, esta clase tendr la responsabilidad de saber que sentencias sql o procedimientos de la base de datos deben ejecutarse para poder realizar una funcin especfica. Importante: Con MySQL para ejecutar instrucciones que lleven parametros debemos usar procedimientos almacenados. Crearemos un procedimiento con parmetros que haga una consulta en la base de datos de una combinacin de usuario y contrasea. Seleccionamos el esquema y elegimos el tab procedimientos almacenados (Stored procedures) y precionamos el botn .

La aplicacin nos solicitar el nombre del procedimiento almacenado, escribimos el nombre spConsultarCredecialesUsuario y presionamos el botn .

A continuacin aparecer una ventana en la cual se crear el procedimiento almacenado.

Dentro del bloque de BEGIN y END escribimos la instruccin a ejecutarse y en los parntesis del nombre del procedimiento configuramos los parmetros de entrada y presionamos el botn .

Verificamos que el procedimiento fue creado exitosamente.

La clase ManejoDatos debe ser publica para que sea accedida desde otros proyectos. Dentro de ella debemos declarar un atributo string para la cadena de conexin que sea privado y un constructor que reciba el valor de dicha cadena. Ademas declararemos un mtodo que ejecute el procedimiento que acabamos de crear.

Recuerde: Las clases DataTable y MySqlParameter no aparecern en verde claro hasta que no use la linea vinotinto que le indica cuales son los namespaces a usar o bien hasta que los escriba manualmente si los conoce.

Con el fin de ver la diferencia entre una consulta y una operacin de modificacin de datos aadiremos dentro de la clase ManejoDatos un mtodo encargado de insertar un registro nuevo en la tabla que tenemos creada. El cdigo del procedimiento es el siguiente:

El procedimiento almacenado que debe crear es el que sigue:

3. Construyendo la lgica de negocios


Ahora que el acceso a datos est construido, debemos construir secuencialmente las otras capas hasta llegar a la interfaz de usuario. Construyamos ahora la lgica de negocio. Vamos al proyecto Escritorio.LogicaNegocio y borramos la clase por defecto Class1.cs.

Luego aadimos una nueva clase en el proyecto que se llame Operaciones. El rbol del proyecto debe quedar como se ve a continuacin.

Recuerde que previamente en la parte uno de esta gua ustede debi aadir la referencia de Ejercicio.LogicaNegocio a Ejercicio.AccesoDatos como lo indicaba el Diagrama de Paquetes. Ahora bien, haga que la clase Operaciones sea pblica y cree las firmas de los mtodos que se indican a continuacin

El mtodo IniciarSesion se encargar de validas si un usuario puede entrar o no al sistema. El mtodo InsertarUsuario se encargar de registrar un usuario nuevo en la base de datos. Ahora aadamos un atributo tipo string privado para la cadena de conexin, y agreguemos el constructor a travs del cual se inicializar.

Ahora completamos los dos mtodos para la ejecucin de las operaciones. En la parte superior del archivo agregamos el using a el proyecto Ejercicio.AccesoDatos.

Dentro del mtodo InsertarRegistro hacemos una instancia de la clase ManejoDatos. Cuando llegamos al constructor podemos observar como este nos pide entregarle la cadena de conexin.

Completamos el procedimiento como sigue a continuacion

Recuerde que el bloque try nos ayuda a controlar errores en la ejecucin, observe ademas que en este caso el throw lanza una nueva excepcion indicando el mensaje y adjuntando la excepcion que pudiera venir desde la base datos. Para implementar el mtodo IniciarSesin en cambio, no haremos una invocacin sencilla. Primero consultaremos y luego verificaremos si la consulta obtuvo resultados, lo que significar que las credenciales del usuario eran correctas. Recuerde colocar el namespaces que hagan falta usando la barra vinotinto para la barra vinotinto para la clase DataTable. El procedimiento debe quedar como sigue

As ha quedado implementada la librera de clases de la lgica de negocio. Ahora bien, aun la interfaz de usuario no puede acceder a estos mtodos, debido a que de acuerdo al Diagrama de Paquetes incial es el servicio web quien accede a estos datos. Vamos entonces a configurar el servicio web. Recuerde que el servicio web actua simplemente como una capa de transporte entre la interfaz de usuario y la logica de negocio. Lo que permite un servicio web es que la lgica de negocios sea accedida a traves de internet. En primer lugar vamos a usar el archivo web.config que es un archivo de configuracin del web service para configurar la cadena de conexin a la base de datos. Este archivo se encuentra dentro del proyecto de tipo servicio web

Dando doble click al web.config se ve lo siguiente:

Buscamos en la pgina sugerida el string de conexin adecuado para mysql http://www.connectionstrings.com/mysql En nuestro caso sera

Vamos al web.config y lo configuramos as

Estos por supuestos son mis datos de configuracin, usted deber cambiar el password por el que ha configurado al instalar MySQL. Ahora vamos a borrar el servicio que hay creado por defecto en el proyecto, asi.

Luego aadimos un nuevo tem

Elegimos el tipo WebService y le damos por nombre LogicaNegocio.

Recuerde conservar la extensin .asmx. Si ha hecho todo bien hasta aqu, el rbol debe verse de la siguiente forma

Recuerde que debi agregar previamente una referencia a Ejercicio.LogicaNegocio en la primera seccin de esta gua. Ahora bien, en la pantalla usted debe estar visualizando el siguiente cdigo.

Este cdigo pertenece al web service que acabamos de agregar, usted debe tener en cuenta algo bsico. Cuando ubica el tag sobre la cabecera de un mtodo, ese mtodo queda expuesto en el web service de otra manera no podr dicho mtodo ser accedido de forma remota. Probaremos quitndole el atributo a el mtodo por defecto y creando nuestros propios mtodos. Cree dos mtodos con las mismas firmas del proyecto Ejercicio.LogicaNegocio.

Desde cada uno de estos mtodos se invocar a la clase operaciones enviadole la cadena de conexin que hay almacenada en el web config.

Recuerde usar la linea vinotinto para incluir los namespaces correspondientes a las clases Operaciones y ConfigurationManager.

4. Construyendo la interfaz de usuario


En este punto todas las capas estn configuradas, necesitamos crear entonces las pantallas a travs de las cuales el usuario interactuar con el sistema, primero crearemos una pantalla de inicio de sesin. Primero borramos la forma que hay creada por defecto

Luego aadimos un nuevo tem

Seleccionamos el tipo WindowsForms y le colocamos el nombre frmInicioSesion.

En la pantalla nos aparece una nueva forma en blanco asi

Agregamos los controles a la forma para que se vea de la siguiente manera

Recuerde el nombramiento correcto de los controles Botones: btnIniciar, btnRegistrarse Labels: lblUsuario, lblClave Textbox: txtUsuario, txtClave

Ahora bien, debemos eliminar la referencia web que habamos construido en la primera parte de la gua.

Ahora aadiremos una nueva al servicio web que hemos creado

Vemos como al momento de explorar las soluciones del proyecto ya no vemos Service1 si no que vemos LogicaNegocio que es el nombre que le pusimos a nuestro servicio web.

Y al darle click vemos que aparecen nuestros mtodos pero no aparece el HelloWorld por que no le quitamos el atributo que lo expona

Configuramos el nombre y aadimos la referencia

El rbol del proyecto debe ver asi

Ahora vamos a la forma y damos doble click sobre el botn iniciar. Aparecer el siguiente cdigo

Invocaremos el mtodo iniciar sesin dentro del click del botn asi

Es importante que se usen los bloques try catch en la interfaz de usuario para que cuando ocurra un error la aplicacin no se detenga, sin embargo observe que en este caso ya no relanzamos la excepcin con un throw si no que exponemos el mensaje enviado por la excepcin. En este momento podemos probar la aplicacin. Primero debemos establecer la forma frmInicioSesion como la que se va ejecutar primero en el punto de entrada

Cercirese ademas de que tiene el proyecto Ejercicio.Escritorio como proyecto de inicio, si no establzcalo.

Presione el botn ejecutar

ubicado en la barra superior.

Debido a que aun no tenemos ningn usuario en la base de datos, solo veremos lo siguiente

Ahora configuremos el botn Registrarse.

Ahora podemos probar ambos botones, primero registramos un usuario.

Y luego oprimimos el botn iniciar sesin.

S-ar putea să vă placă și