Etiqueta: truco

  • como conectar a una base de datos de MySQL en un servidor Web desde .NET

     

    Pues eso… hace unos días he estado haciendo una pequeña aplicación para acceder a una base de datos de MySQL creada en un servidor web de Domitienda y voy a aprovechar para comentarte las cosillas que he hecho (como conectar a una BBDD de MySQL, enviar emails, obtener datos de tres tablas diferentes pero que había que relacionar para sacar lo que interesaba, etc.) y la primera fue lo más importante: Conectar con una base de datos de MySQL con Visual Basic .NET (o .NET en general).
    Y esto es lo que te voy a contar en este "artículo" de hoy lunes 13 de abril de 2015.

    Los requisitos

    Lo primero que deberías hacer es descargarte la DLL (librería/biblioteca) de MySQL para usar con Visual Studio, bueno, en realidad lo que yo me iba a bajar el Connector .NET, concretamente la versión 6.9.6 porque decía que la versión 6.7 el Connector/Net no incluye el "MySQL for Visual Studio integration", así que ni me puse a "investigar" a qué se refería, por tanto me bajé el MySQL for Visual Studio, concretamente la versión web community 5.6.23.0 (a la hora de escribir esto está la versión 5.6.24.0).

    Nota:
    El descargar la versión "web community" es porque tenía conexión a internet y así solo tenía que descargar 1.6MB frente a los 286,7MB de la versión off-line.

    Es un MSI installer y te da un montón (o dos o tres o cuatro, pal caso es lo mismo) de opciones, pero solo usé la del Connector o lo que pusiera en las opciones de instalación.

     

    Añadir la referencia de MySql.Data al proyecto

    Una vez instalado, en el proyecto desde el que quieras acceder a la base de datos de MySQL le agregas la referencia correspondiente.
    En mi caso usé la versión 4.5 ya que el proyecto también usaba el .NET Framework 4.5 (ver la figura 1).

    MySqlData referencia
    Figura 1. Referencia al ensamblado de MySql.Data versión 6.9.5

    Y una vez que hemos agregado la referencia al ensamblado MySql.Data ya podemos acceder a las clases de conexión y demás, que están en el espacio de nombres MySql.Data.MySqlClient.

    Y el resto… como de costumbre… pero no te preocupes te voy a poner el código (primero para VB y después para C#) de cómo usar la conexión y acceder a una tabla y demás, pero eso será… ¡ma-ña-na! 🙂

    Bueno, vale, al menos te pondré el código de cómo conectar a la base de datos.

     

    Conectar a la base de datos de MySQL desde Visual Basic .NET

    Yo suelo usar un método en una clase con métodos compartidos (en VB puedes usar un módulo, pero yo uso una clase para después convertir fácilmente el código a C#), el método es una función llamada CadenaConexion que devuelve una cadena con la cadena de conexión generada por la clase ConnectionStringBuilder, en realidad la clase se llama MySqlConnectionStringBuilder, pero si has usado conexión a SQL Server sabrás que en ese caso el nombre es SqlConnectionStringBuilder.

    Para poder acceder a las clases de MySql.Data debes añadir una importación de espacios de nombres a MySql.Data.MySqlClient:

    ' Para Visual Basic:
    Imports MySql.Data.MySqlClient
    
    // Para C#:
    using MySql.Data.MySqlClient;

    Y esta es la definición del método que está en una clase (class) de VB y por eso el método lo he definido como Shared (static en C#) para que lo puedas usar simplemente anteponiendo el nombre de la clase y sin necesidad de crear nuevas instancias ni nada de eso:

    El código del método CadenaConexion para Visual Basic:

    ''' <summary>
    ''' La cadena de conexión a la base de datos
    ''' </summary>
    Public Shared Function CadenaConexion() As String
        Dim csb As New MySqlConnectionStringBuilder
        csb.Server = "mysql3.servidoreswindows.net"
        csb.Database = "nombre_Base_Datos"
        csb.UserID = "nombre_usuario_de_la_base"
        csb.Password = "la_clave_del_usuario_de_la_base"
        csb.IntegratedSecurity = False
    
        Return csb.ConnectionString
    End Function
    
    

    El método CadenaConexion para C#:

    /// <summary>
    /// La cadena de conexión a la base de datos
    /// </summary>
    public static string CadenaConexion()
    {
        MySqlConnectionStringBuilder csb = new MySqlConnectionStringBuilder();
        csb.Server = "mysql3.servidoreswindows.net";
        csb.Database = "nombre_Base_Datos";
        csb.UserID = "nombre_usuario_de_la_base";
        csb.Password = "la_clave_del_usuario_de_la_base";
        csb.IntegratedSecurity = false;
    
        return csb.ConnectionString;
    }
    

     

    Y esto es todo por hoy… mañana (seguramente)… más… 😉

     

    Nos vemos.

    Guillermo

    Este artículo también está publicado en mi sitio:

    http://www.elguille.info/NET/ADONET/MySQL_CadenaConexion.aspx

    ( En realidad obtiene el contenido desde aquí, de mi blog 🙂 )

  • Si comparas fechas, mejor usa TimeSpan en vez de Substract

     

    Pues eso… estaba haciendo unas comprobaciones para mostrar un aviso después de pasado cierto tiempo, por ejemplo, si han pasado varias horas o minutos entre dos fechas, concretamente entre una fecha almacenada y la otra la fecha y hora actual.

    Lo que en un principio se me ocurrió es hacer uso del método Substract de la clase DateTime (también Date para Visual Basic) y mirar si, por ejemplo, había al menos una diferencia de 5 minutos, algo así:

    VB:

    If fecha1.Subtract(fecha2).Minutes > 5 Then

    C#:

    if (fecha1.Subtract(fecha2).Minutes > 5)

    El problema es que esto solamente comprueba si en la información de los minutos de las dos fechas hay esa diferencia una vez que a los minutos de la fecha2 se le resten los minutos de la fecha1.

    Sí, está claro, así es como debe funcionar.

    Pero ¿qué pasa si los minutos no se diferencian en 5 pero la fecha completa (fecha1) es mayor que la otra (fecha2) en al menos un día (o solo una hora)?

    Pasa que Substract falla.

    Si lo que en realidad queremos es comprobar si entre dos fechas ha pasado cierto periodo de tiempo, por ejemplo los 5 minutos de este ejemplo, pero comprobando las fechas y horas al completo, (es decir, si ha pasado más de un día, quiere decir que ha pasado más de 5 minutos), entonces deberíamos usar TimeSpan.

    Este es el código a usar:

    VB:

    ' con TimeSpan tiene en cuenta la fecha completa
    Dim tsMinutos As New TimeSpan(0, 5, 0)
    Dim tsDif = fecha1.Subtract(fecha2)
    If tsDif > tsMinutos Then
        bAvisado = True
    End If
    

     

    C#:

    // con TimeSpan tiene en cuenta la fecha completa
    TimeSpan tsMinutos = new TimeSpan(0, 5, 0);
    var tsDif = fecha1.Subtract(fecha2);
    if (tsDif > tsMinutos)
    {
        bAvisado = true;
    }

     

    Captura usando estas dos fechas:

    fecha1 = New DateTime(2014, 11, 19, 16, 26, 0)

    fecha2 = New DateTime(2010, 10, 12, 7, 26, 0)

    Comparar_DateTime

     

    Y esto es todo…

    Si quieres ver el código al completo (aplicación de consola) tanto para Visual Basic como para C#, sigue este enlace a mi sitio de descargas:

    Fichero con el código de ejemplo.

    Nombre: Comparar_DateTime.zip

    Tamaño: 21,3 KB

    MD5 checksum: 78025D0A1B2DE530C46735E5288A4071

     

    Nos vemos

    Guillermo

  • hacer LOGIN en una máquina virtual de Azure

     

    Pues eso… que estoy probando con Azure y las máquinas virtuales "prefabricadas" que ofrece a los suscriptores de MSDN, y además de probar algunas con Visual Studio instalado (funcionando en Windows Server 2012 R2) también quise probar con una de Windows 10 Technical Preview for Enterprise (x64) y así evitarme el tener que montar una máquina virtual en mi propio equipo.

    Windows 10 enterprise

     

    Con las máquinas virtuales funcionando en Windows server 2012 R2 no tuve problema para conectarme mediante escritorio remoto y hacer el "login" correspondiente usando el usuario y la contraseña indicados al crear la máquina virtual.

    Pero no fue así de sencillo con el Windows 10 (también probé con un Windows 8.1 Enterprise) ya que me indicaba que ese usuario no podía iniciarse en el equipo (o un mensaje de error parecido). Probé de varias formas, con varios usuarios (aparte del creado por mí), pero nada…

    Hoy me ha dado por buscar en "SAN GOOGLE" usando este texto: "how to login in windows 10 enterprise azure" y… ¡premio! (o BINGo), aquí está la respuesta:

    Azure Windows 10 Technical Preview for Enterprise (x64) VM Login Issue

    Y el truco consiste en usar como "dominio" el nombre de la DNS creada con la máquina virtual seguida del usuario con el que quieres hacer login, por ejemplo: W10Enterprise.cloudapp.net\Guillermo.

    Y eso es todo.

     

    Nos vemos.
    Guillermo