Servicios web .NET con conexión a MySQL

Servicios web .NET con conexión a MySQL
13/10/11


Éste es un pequeño artículo para quien se vea en la necesidad de crear servicios web bajo la plataforma .NET que tengan que acceder a una base de datos MySQL.

Introducción y herramientas

Como trabajo fin de grado tengo que desarrollar una aplicación bajo Android que se comunique con una base de datos MYSQL en un servidor. Para realizar tal tarea pensé en crear un servicio web que hiciera de intermediario entre mi aplicación y el servidor con la base de datos, por desgracia tuve que hacerlo bajo Windows por lo que el servicio web estaría desarrollado en C# usando VIsual Web Developer Express (descargar aquí). Por ello el tuto está desarrollado bajo dichas plataformas.

Introducción a los servicios web

Los servicios web funcionan como una capa intermedia que enlaza en mi caso una aplicación Android con una base de datos, pero puede ser el enlace entre dos aplicaciones o entre una aplicación y la persistencia. De esta manera se hace transparente el acceso a distintos contenidos web por parte de las aplicaciones que desarrollemos.

Creación de servicios web en .NET

Bajo Visual Web Developer Express es sencillo crear un servicio web en C#, simplemente Archivo->Nuevo y elegimos un servicio web y bajo el lenguaje C#. Un Servicio web constará de una clase principal donde se alojarán los métodos públicos a los que se accederá a través de Internet y métodos internos a los que se accederá internamente. Para  métodos de acceso externo debemos escribir la etiqueta [WebMethod] antes de la declaración del método. Un ejemplo de servicio web:

namespace Service
{
    ///
    /// Descripción breve de Service1
    ///
    [WebService(Namespace = "http://ip:puerto/Service/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio Web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente.
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod] //Marca del método que lo define como de acceso externo
        public string hello()
        {
            return "hello";
         }
    }
}

Acceso del servicio web a la base de datos mysql

Ahora que ya se conoce el funcionamiento de los servicios web puedo pasar al enlace de dichos servicios web con una base de datos (mysql en este caso)..En el caso del servicio web hay que descargarse de la página de mysql el conector para .NET de aquí (es la version 3.6.7 ya que la 6.4.4 da algunos errores a la hora de acceder a la base de datos) . Una vez descargado e instalado pasamos a añadirlo a nuestro servicio web. Para ello, vamos a la pestaña del explorador de soluciones y en la parte de referencias (carpeta References) hacemos click derecho->Agregar referencia. Buscamos en la pestaña de .NET la referencia a MySql.Data y damos a añadir.
Una vez hecho esto ya podemos tener acceso a la base de datos desde el servicio web. En el caso de mi proyecto y obligado a trabajar con Windows Server, me encontré con el problema de que no conseguía acceder a la base de datos. LA SOLUCIÓN: instalar en el servidor la misma versión del conector que instalé en mi computadora para añadir al servicio web. De esta manera conseguí conectarme a la base de datos.

Acceso a la base de datos desde servicios web (Código)

Ahora por fin podemos ver ya en código el acceso a una base de datos mysql. Para acceder a la base de datos mysql debemos abrir primeramente una conexion con dicha base de datos. Para ello utilizaremos MysqlConnection, al cual hay que pasarle un String que definirá el path con los datos de la base de datos ( dirección de la base de datos, nombre de la base de datos, contraseña y usario). un ejemplo:

string path = "Server=xxx.xx.xx.xx; database=nombre_base_de_datos; password=pass;
User=user;";
MySqlConnection conexion = new MySqlConnection(path);

Una vez abierta la conexión, podemos realizar las consultas que necesitemos siguiendo uns pasos básicos. Existe una diferencia entre realizar una introducción o una consulta y se utilizarán distintos métodos para ello. Pongo un ejemplo de acceso y de consulta a una base de datos mysql:

string path = "Server=xxx.xx.xx.xx; database=nombre_base_de_datos; password=pass; User=user;";
MySqlConnection conexion = new MySqlConnection(path);
conexion.Open();
MySqlCommand command = conexion.CreateCommand();
//creamos un comando de inserción en la base de datos
command.CommandText =INSERT INTO table_name values (  ”value1”,”value2”);
command.Connection = conexion;
int num = 0;
num = command.ExecuteNonQuery();
 
//en el caso de una consulta
 command.CommandText = SELECT * FROM table_name;
command.Connection = conection;
MySqlDataReader reader = command.ExecuteReader();
//comprobamos que la consulta haya tenido efecto
if (reader.HasRows == true)
{
//gestionamos los datos devueltos
}
//cerramos la conexión con la base de datos en cualquiera de los dos tipos de acceso
command.Connection.Close();

Con eso bastaría, ya tendríamos un servicio web que se conectaría a una base de datos mysql.

Escrito por Jesús Manzano Camino


Puedes dejar un comentario, o referenciar este post desde tu sitio web.

Hay 1 comentarios en este post.

 
Enrique Mayo 9, 2012 Reply

Muy claro y sencillo.
Excelente explicación.

Gracias,
Enrique

Responde