Catástrofe en el blog

Debido ha un cumulo de coincidencias todo el contenido del blog se ha perdido, por lo visto ha habido un fallo con el servidor, por lo que me ha dicho mi proveedor, hubo un fallo en el disco duro principal[singlepic id=14 w=320 h=240 float=right] y al entrar en funcionamiento el de respaldo este también fallo, por lo visto fue provocado por un fallo en la fuente de alimentación, que cosas más raras me pasan. Y para que no que hay las cosa, el fichero con la copia de seguridad esta mal, a esto puedo encontrarle una explicación un poco más lógica, por la hora que tiene el fichero de la copia, por lo visto cuando se estaba haciendo la copia es cuando debió fallar el servidor, así que el fichero se quedo a medias. Todo el trabajo que he realizado durante estos últimos años, recopilando información sobre trabajos de electrónica, trucos y curiosidades de programación, análisis de aparatos, etc, se ha esfumado por no decir algo más fuerte.

Intentare buscar copias de seguridad antiguas, buscar en la cache de google y demás cosas, para poder recuperar algo del trabajo de estos últimos años. Aunque lo veo muy difícil recuperar todo el contenido, las copias antiguas que tengo, es de cuando cambio de versión del software del blog, y no se como llevaran las versiones viejas con la nueva.

Aprovechando el desastre he cambiado la imagen del blog, he implementado otra forma de hacer las copias de seguridad para que no me vuelva a pasar otro desastre igual, aunque como se suele decir “En casa de herrero cuchillo de palo”, seguro que volveré a tropezar el la misma piedra otra vez.

Es pero que os gusten la nueva imagen, espero vuestros comentarios .

Conectarse ha una base de datos MySql con C#

Para conectarse ha una base de datos en MySql lo primero que tenemos que hacer es agregar la siguiente linea a nuestro programa

using MySql.Data.MySqlClient;

Con esto agregamos todos las funciones que necesitamos para poder manejar la conexión con el servidor de MySql.

Lo siguiente que tendremos que hacer sera crear las variables que nos permitirá manejar la conexión con el servidor de MySql deseado.

MySqlConnection dbConexion1 = new MySqlConnection();

Ahora lo que tenemos que hacer es pasarle los parámetros como la dirección del servidor de base de datos, el nombre de la base datos ha la que queremos tener acceso, el nombre de usuario de la cuenta y su correspondiente contraseña. Esto se puede hacer de la siguiente manera:

String sConexion;
sConexion1 = "Server=192.168.1.4;Database=BaseDeDatos;Uid=Usuario;Pwd=contrasenya;";

Creamos una variable string, luego le pasamos los valores anteriores con el siguiente formato:

  • Server: Nombre o dirección del servidor de MySql
  • Database: Nombre de la base de datos a la que queremos tener acceso.
  • Uid: Nombre del que tiene acceso a esa base de datos.
  • Pwd: Contraseña asignada a ese usuario.

Estos campos los tendremos que separar en la cadena que le pasemos a la variable con “;”.

Ahora solo tendremos que pasar la variable string  que acabamos de crear , al parámetro correspondiente en la variable de la conexión

dbConexion1.ConnectionString = sConexion1;

Despues de esto solo nos queda decirle al conector que se conecte al servidor.

dbConexion1.Open();

Si esto no produce ningún error, como usuario no reconocido, contraseña incorrecta, servidor desconocido, etc, ya tendremos acceso a la base de datos de MySql.

La verdad es que es muy sencillo, ¿A ti que te parece?

Como cambiar el nombre de las columnas de un DataGridView en C#

Siguiendo con lo explicado en el post (Leer ficheros XML a través de DataSet (c#)) al final del post se muestra un ejemplo de como leer un fichero xml con un dataset y se mostraba el contenido en un DataGribView. En este ejemplo los nombres que aparecen en las cabeceras de las columnas son los nombres de los campos que están en el fichero. Para modificar estos nombres solo hay que utilizar la siguiente función implementada dentro del objeto DataGridView

dataGridView1.Columns[0].HeaderText = "TextoAMostrarEnLaCabecera";

El numero entre corchetes en Columns, en el ejemplo 0, es el numero de la columna que vamos a cambiar el texto del encabezado. Las columnas empiezan ha enumerarse desde el 0, es decir la primera columna es la 0.

Ejemplo de funcionamiento.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Xml_DataSet_1
{
    public partial class fLeerXmlDataSet : Form
    {
        // Objeto dataset para manejar el fichero
        // no le ponemos nombre de la base de datos para poder abrir cualquier fichero
        DataSet dsLeerFicheroXML = new DataSet();

        public fLeerXmlDataSet()
        {
            InitializeComponent();
        }

        private void bAbrirFicheroXml_Click(object sender, EventArgs e)
        {
            // Limpiamos el contenido anterior
            dsLeerFicheroXML.Clear();

            // Creamos el objeto para abrir el fichero
            OpenFileDialog odAbrirFicheroXML = new OpenFileDialog();
            // Le ponemos un filtro para ver solamente los ficheros XML
            odAbrirFicheroXML.Filter = "Ficheros Xml|*.xml";

            // Montramos el dialogo para abrir el fichero XML
            if (odAbrirFicheroXML.ShowDialog() == DialogResult.OK)
            {
                // Si se ha pulsado el boton de OK
                // Le pasamos el nombre del fichero al DataSet para abrirlo
                dsLeerFicheroXML.ReadXml(odAbrirFicheroXML.FileName);
                // Le pasamos el contenido de la primera tabla del fichero al DataGridView
                dgvLeerFicheroXML.DataSource = dsLeerFicheroXML.Tables[0];

                // cambiamos el nombre de las columnas del DataDridView
                for (int vCont = 0; vCont < dgvLeerFicheroXML.ColumnCount; vCont++)
                {
                    dgvLeerFicheroXML.Columns[vCont].HeaderText = "Columna " + (vCont + 1).ToString();
                }
            }
        }
    }
}

Fácil, No?

Leer ficheros XML a través de DataSet (c#)

Para leer un fichero xml en c# se puede utilizar los componentes de manejo de base de datos. Esto facilita enormemente su manejo.

Ejemplo de un fichero XML.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<NombreBaseDeDatos>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 1 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 1</NombreCampo4>
  </NombreTabla1>
  <NombreTabla2>
    <NombreCampo1>Campo 1 Registro 1 Tabla 2</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 1 Tabla 2</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 1 Tabla 2</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 1 Tabla 2</NombreCampo4>
  </NombreTabla2>
  <NombreTabla1>
    <NombreCampo1>Campo 1 Registro 2 Tabla 1</NombreCampo1>
    <NombreCampo2>Campo 2 Registro 2 Tabla 1</NombreCampo2>
    <NombreCampo3>Campo 3 Registro 2 Tabla 1</NombreCampo3>
    <NombreCampo4>Campo 4 Registro 2 Tabla 1</NombreCampo4>
  </NombreTabla1>
</NombreBaseDeDatos>

Formato como se guarda la información en el fichero XML. El fichero en si es la base de datos, este puede contener una base de datos o varias, dentro de este están las posibles tablas que pudiera tener esa base de datos. Y estas a su vez contendrá los registros que tenga cada una de las tabla con sus respectivos campos.

Lectura de fichero XML

Para leer el fichero XML lo primero tendremos que crear un objeto del tipo “DataSet” para que maneje el fichero. Hay dos formas de crearlo, sabiendo como se llama  nuestra base de datos o no.

Sin saber como se llama la base de datos:

// Crear el objeta DataSet sin conocer el nombre de la base de datos
DataSet dataSet1 = new DataSet();

Esto permite ver cualquier contenido del fichero.

Conociendo como se llama la base de datos:

// Crear el objeta DataSet conociendo el nombre de la base de datos
DataSet dataSet1 = new DataSet("NombreDeLaBaseDeDatos");

De esta otra forma solo se podrán manejar los datos que estén dentro de esa base de datos. Teniendo creado el objeto DataSet solo queda asignarle el nombre que tiene el fichero XML.

dataSet1.ReadXml("RutayNombreDelFicheroXML");

Con esto ya tenemos configurado nuestra DataSet para leer los datos del fichero. A partir de aqui, se maneja de la misma forma que cualquier otro DataSet que funcione con cualquier otro tipo de base de datos.

Ejemplo de funcionamiento.

Se lee el fichero y se muestra en un DataGridView

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Xml_DataSet_1
{
    public partial class fLeerXmlDataSet : Form
    {
        // Objeto dataset para manejar el fichero
        // no le ponemos nombre de la base de datos para poder abrir cualquier fichero
        DataSet dsLeerFicheroXML = new DataSet();

        public fLeerXmlDataSet()
        {
            InitializeComponent();
        }

        private void bAbrirFicheroXml_Click(object sender, EventArgs e)
        {
            // Limpiamos el contenido anterior
            dsLeerFicheroXML.Clear();

            // Creamos el objeto para abrir el fichero
            OpenFileDialog odAbrirFicheroXML = new OpenFileDialog();
            // Le ponemos un filtro para ver solamente los ficheros XML
            odAbrirFicheroXML.Filter = "Ficheros Xml|*.xml";

            // Montramos el dialogo para abrir el fichero XML
            if (odAbrirFicheroXML.ShowDialog() == DialogResult.OK)
            {
                // Si se ha pulsado el boton de OK
                // Le pasamos el nombre del fichero al DataSet para abrirlo
                dsLeerFicheroXML.ReadXml(odAbrirFicheroXML.FileName);
                // Le pasamos el contenido de la primera tabla del fichero al DataGridView
                dgvLeerFicheroXML.DataSource = dsLeerFicheroXML.Tables[0];
            }
        }
    }
}

Envio de SMS mediante c# y comandos AT

Para enviar mensaje SMS, hace falta un módem o teléfono que soporte envió de sms, conexión con el ordenador, ya sea mediante bluetooth, usb o puerto serie. Los módem gsm soportan comandos AT, eston permiten configurar y obtener diversa información del módem gsm, como puede ser marca, modelo, nivel de cobertura, proveedor de la conexión, realizar llamadas, etc.

Para mas información sobre los comandos at del puede ver la pagina de la Wikipedia ” Conjunto de comandos AT”.
Para poder comunicarnos desde nuestro programa en C# con el módem o teléfono necesitamos el componente “SerialPort”. Esto componente nos permite realizar comunicación mediante puerto serie.
Creación e inicialización del componente SerialPort
sModem = new SerialPort("COM1",9600, Parity.None, 8, StopBits.Two);
Donde:
  • Com1: es el puerto donde esta conectado el módem o teléfono gsm
  • 9600: Velocidad a la que nos conectaremos al aparato.
  • Parity.None: Paridad ninguna.
  • 8: Tamaño del bit de datos.
  • StopBits.Two: Bits de parada, en este caso 2.

Estos parámetros hay cambiarlos por los que específicos del módem al que vamos ha conectarnos.

Ejemplo de función:

// Función para mandar sms
public Boolean EnviarMensaje(string NumTel, string Mensaje)
{
    try
    {
        // Comando de comprobación                
        sModem.Write("AT\r");
        // Pasamo a modo SMS
        sModem.Write("AT+CMGF=1\r");
        // Enviamos el numero al que queremos enviar el SMS
        sModem.Write("AT+CMGS=\"" + NumTel.Trim() + "\"\r");
        // El texto del mensaje, se termina con Control+Z
        sModem.Write(Mensaje.Trim() + '\x001a');
        // Si todo sale bien devuelve true
        return true;
    }
    catch (Exception Error)
    {
        // si hay algún error devuelve false
        return false;
    }
}