Browsing articles tagged with " Visual Studio"
mar 15, 2011

Detectar si hay conexión de datos en WP7

En esta entrada explicaremos como detectar si existe conexión de datos en nuestra aplicación Windows Phone. Nos puede ser de mucha utilidad si queremos controlar errores en nuestra aplicación si es que esta utiliza acceso a la nube. La función es muy simple, detecta si hay conexión Wifi, 3G, etc. y devuelve el resultado.

Empezaremos añadiendo la referencia a System.Net.NetworkInformation.

using System.Net.NetworkInformation;

Y esta sería nuestra función:

private bool InternetIsAvailable()
        {
            if (!NetworkInterface.GetIsNetworkAvailable())
            {
                MessageBox.Show("No tienes conexión de internet.");
                return false;
            }
            else
            {
                MessageBox.Show("Tienes conexión de internet.");
                return true;
            }
        }

Un ejemplo de como se llama a la función desde el programa principal de la página.

public MainPage()
        {
            InitializeComponent();
 
            if (InternetIsAvailable())
            {
                textBox1.Text = "Conectado a Internet";
            }
            else
            {
                textBox1.Text = "No Conectado a Internet";
            }
 
        }

Aquí os podéis descargar el código:

Archivo: ConnectionTest.zip

Que menos que rematar este post con un tema de los que hacen época… Broken Wings de Alter Bridge. A disfrutar!

 

feb 25, 2011

Tutorial de programación para Windows Phone

Como ahora me ha dado por aprender a programar aplicaciones para Windows Phone he estado buscando mucha información sobre el tema. Os dejo un link a un tutorial muy completo en PDF que he encontrado por ahí, me ha parecido muy didáctico e imprescindible ya que la información acerca de este entorno no es que sobre precisamente. A algunos les decepcionará el que esté en inglés pero que se le va a hacer… no pienso ponerme a traducirlo…

Programming Windows Phone 7

feb 25, 2011

Acceso a datos desde WP7 a tablas MySQL

 

Supongo que empiezo la casa por el tejado pero mi primer post sobre desarrollo para Windows Phone 7 va a estar dedicado a la captura de datos de MySQL. El ejemplo que voy a implementar os ayudará a capturar datos desde vuestra aplicación WP7 de una Base de Datos MySQL que tengáis accesible en vuestro servidor.

La verdad es que este tema me ha generado bastantes dolores de cabeza y la auséncia de información en Internet me ha llevado a resumiros el procedimiento que he seguido. Espero que os sea de ayuda. Empezamos:

Bien, el primer concepto que debemos tener en cuenta es que no se puede acceder directamente desde vuestra aplicación de WP7 a las tablas MySQL, o eso es lo que he deducido después de buscar información. Necesitaremos crear un servicio WCF que resumiendo torpemente, es la aplicación puente que utilizaremos para acceder a datos externos alojados en la nube. En esta aplicación implementaremos todas las funciones necesárias para recoger o insertar y las llamaremos más tarde desde nuestra aplicación WP7.

El primer paso será crear un proyecto tipo WCF Service Application. Seguidamente descargaremos el Connector MySQL para .NET desde aquí. Después de instalar el fichero descargado tendremos que añadir la referencia a nuestra aplicación WCF de la DLL MySql.Data.dll que se encuentra en mi caso en la ruta C:\Program Files\MySQL\MySQL Connector Net 6.2.4\Assemblies\.

Ahora ya podemos añadir las referencias a la librería en el fichero Service1.svc.cs.

using System.Data;
using System.Data.Sql;
using System.Data.OleDb;
using MySql.Data.MySqlClient;

Ahora imeplementaré una función que devolverá un valor de la Base de Datos MySQL recibiendo como parámetro un filtro.

namespace WcfService1
{
 
    public class Service1 : IService1
    {
 
        MySqlConnection myConn;
        string a;
 
        public string GetData(int value)
        {
            myConn = new MySqlConnection("user id=usuario; password=contraseña; database=basededatos; server=ipservidor");
            myConn.Open();
            string[] myList = new string[10];
            string strSQL = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA="+value;
 
            MySqlCommand mysqlCmd = new MySqlCommand(strSQL, myConn);
            MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
 
            int i = 0;
            while (mysqlReader.Read())
            {
 
                if (mysqlReader.GetString(1).ToString() != null)
                {
                    a = mysqlReader.GetString(1).ToString();
                    //myList = mysqlReader.GetString(0).ToString();
                }
                else
                {
                    a = null;
                }
                i++;
 
            }
            myConn.Close();
 
            return string.Format(a);
        }
    }
}

Esta función devuelve el nombre de una empresa pasándole como parámetro su ID.  Es una función chorras pero me sirve para el propósito de este post.


Lo siguiente que haremos será vincular el servicio WCF a una aplicación WP7.

Desde nuestro proyecto WCF si hacemos click derecho encima del proyecto tenemos la opción View in Browser (Ver en navegador), aceptamos y se nos abrirá una página web, copiamos la dirección al clipboard.

Creamos un proyecto tipo Windows Phone Application y iremos a Add Service Reference, solo deberemos pegar la dirección web que habíamos copiado anteriormente y ya tendremos vinculado nuestro servicio web.

Como ejemplo he añadido a la aplicación un boón y una área de texto. En el evento click del boón le pasaremos un parámetro id de empresa al web service y el nombre de empresa que devuelve lo pondremos en el campo de texto de la aplicación móvil.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
 
using WindowsPhoneApplication4.ServiceReference1;
 
namespace WindowsPhoneApplication4
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Service1Client client = new Service1Client();
            client.GetDataCompleted += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
            client.GetDataAsync(5, client);
        }
 
        void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
        {
            Service1Client client = e.UserState as Service1Client;
            client.GetDataCompleted -= client_GetDataCompleted;
 
            if (e.Error != null)
            {
                //TODO: Gestionar el error
                return;
            }
 
            string getDataResult = e.Result;
            //getDataResult = "You entered: 5";
            textBox1.Text = e.Result;
        }
 
    }
}

Ya solo queda probar nuestra aplicación. Así de cutre y así de complicado se me ha hecho encontrar este método. Espero haberos sido de ayuda.

 

**** Actualización 08/04/11 ****

Se ha añadido el código de la aplicación de test de este capítulo. Podréis observar que lo he variado un poco pero es prácticamente el mismo. Además se han añadido algunas capturas de pantalla nuevas para hacer más comprensible el método.

Archivo: MySQLConnection-1.0.zip (Versión 1.0)

 

**** Actualización 10/05/11 ****

Consulta que devuelve más de un valor

En esta segunda revisión del ejemplo se han añadido las funciones para capturar múltiples valores de un registro de la Base de Datos MySQL.  En este ejemplo os muestro como quedaría la función en nuestro servicio WCF.

public List<Models.Empresa> DatosEmpresa2(int idEmpresa)
        {
            List<Models.Empresa> ListaEmpresas = new List<Models.Empresa>();
 
            myConn = new MySqlConnection(Models.Config.ConnectionString);
            myConn.Open();
 
            string Sql = "SELECT * FROM EMPRESAS WHERE ID_EMPRESA=" + idEmpresa;
 
            MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
            MySqlDataReader mysqlReader = mysqlCmd.ExecuteReader();
 
            //int i = 0;
            while (mysqlReader.Read())
            {
                if (mysqlReader.GetString(1).ToString() != null)
                {
                    Models.Empresa Item = new Models.Empresa();
                    Item.Id = Convert.ToInt32(mysqlReader.GetString("ID_EMPRESA").ToString());
                    Item.Nombre = mysqlReader.GetString("NOMBRE").ToString();
                    Item.Actividad = mysqlReader.GetString("ACTIVIDAD").ToString();
                    Item.Contacto = mysqlReader.GetString("CONTACTO").ToString();
                    Item.Zona = mysqlReader.GetString("ZONA").ToString();
 
                    ListaEmpresas.Add(Item);
                }
                //i++;
            }
            myConn.Close();
            return ListaEmpresas;
        }

Archivo: MySQLConnection-2.0.zip (Versión 2.0)

 

**** Actualización 20/05/11 ****

Consulta de inserción (INSERT)

Aprovecho para colgar una función de inserción en la Base de Datos. Es una función de ejemplo muy simple pero quizá os pueda servir para vuestros propósitos.

public void InsertItem(string Nombre, string Actividad, string Contacto)
        {
            myConn = new MySqlConnection(Models.Config.ConnectionString);
            myConn.Open();
 
            String Sql = "INSERT INTO EMPRESAS (NOMBRE, ACTIVIDAD, CONTACTO) VALUES ( " +
                "'" + Nombre + "', '" + Actividad + "', '" + Contacto + "')";
 
            MySqlCommand mysqlCmd = new MySqlCommand(Sql, myConn);
            mysqlCmd.ExecuteNonQuery();
        }

Y este sería el código de la aplicación WP7 que llama a la función de insertar. Está testeado y a mi personalmente me ha funcionado. Es un código muy simple, mediante el evento de un botón se inserta en la BBDD MySQL el valor de 3 campos de texto.

private void InsertButton_Click(object sender, RoutedEventArgs e)
        {
            Service1Client client = new Service1Client();
 
            client.InsertItemAsync(textBox3.Text, textBox4.Text, textBox5.Text);
 
        }

Actualizo el fichero con el código testeado.

Archivo: MySQLConnection-3.0.zip

PD: El proyecto WCF no podréis crearlo sin la plantilla del proyecto instalada y la mala notícia es que no viene con Windows Phone Toolkit. Necesitaréis descargarla o tener el Visual Studio completo.