Como almacenar la ruta de un archivo en un BD – Visual Studio 2012 – Mysql – Csharp



Como almacenar la ruta de un archivo en un BD – Visual Studio 2012 – Mysql – Csharp



Hola hoy es viernes 31 de mayo, y pues a petición de unos cuates de como almacenar archivos en sí, pues este ejemplo está desarrollado usando:

  • Mysql
  • Visual C#(Sharp)
  • IDE 2012

Bueno revisando tantos detalles la mejor forma, es almacenar los archivos en la raíz de la unidad, no usar espacios y puede ser en C:, D:, E: dentro de una carpeta para mi ejemplo la mia se llama files:



Y funciona muy bien.

Ahora vamos con el código para ello me creador una tablita súper sencilla:

create table almacenamiento;



use almacenamiento;



create table almacenar(

idalma int not null auto_increment,

url varchar(255),

tipo varchar(15),

primary key(idalma))engine=innodb;



una vez creada  me he creado el siguiente entorno:



enla imagen anterior podemos observar que ya hice unas pruebas, y las que me funcionaron fueron las ultimas dos que ya se encuentra en la unidad E: y el nombre del archivo sin espacios.

Muy aclaro esto vamos con el código.

Hacemos referencia a mysql.

using MySql.Data.MySqlClient;

using MySql.Data.Types;

using MySql.Data;

using System.Diagnostics;

cuando cargue nuestro formulario leemos el contenido de nuestra tabla para ello llamamos a la función leer.

        private void Form1_Load(object sender, EventArgs e)

        {

            leer();

        }



Por lo que la función leer contiene:

        private void leer()

        {

            dataGridView1.Columns.Clear();//limpiamos columnas

            dataGridView1.Rows.Clear();//limpiamos filas

            dataGridView1.ColumnCount = 2;//añadimos 2 columnas

            dataGridView1.Columns[0].Name = "Ubicacion del archivo ";

            dataGridView1.Columns[0].Width = 400;

            dataGridView1.Columns[1].Name = "Tipo";

            dataGridView1.Columns[1].Width = 100;

            //inciando la busqueda del usuario

            string insertar = "select * from almacenar";

            conexiones conec = new conexiones();

            string conexion = conec.conexion;

            MySqlConnection con = new MySqlConnection(conexion);

            MySqlCommand cmd = new MySqlCommand(insertar, con);

            try

            {

                con.Open();

                MySqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())

                {//almacenamos en el datagrid

                    dataGridView1.Rows.Add(dr["url"].ToString(), dr["tipo"].ToString());

                }

            }

            catch (Exception exc)

            {

                throw new Exception("No se pudo realizar la conexion", exc);

            }

            finally

            {

                con.Close();

            }

        }



Seguido vamos a buscar nuestro archivo para ello añadiremos un control del cuadro de dialogo abrir en el botón codificamos.

            DialogResult abrir;

            openFileDialog1.Title = "abrir el archivo";

            openFileDialog1.Filter = "Todos los archivos|*.*";

            abrir = openFileDialog1.ShowDialog();

            if(abrir == DialogResult.OK)

            {

                string dirimagen = openFileDialog1.FileName; //Obtiene la ruta completa

                //string dirimagen = openFileDialog1.SafeFileName; //Obtiene solo el nombre del archivo

                textBox1.Text =  dirimagen;

            }



Despues de ello elegimos el tipo de archivo a almacenar para ello hemos usado un comboBox con el siguiente contenido:

  • Imagen
  • Pdf
  • Word
  • Excel



En el botón guardar almacenaremos la ruta del archivo y el tipo.

       private void button1_Click(object sender, EventArgs e)

        {

            if (textBox1.Text != "")

            {

                string insertar = "INSERT INTO almacenar(url,tipo) VALUES(?url,?tipo)";



                //en otra variable string colocamos la direccion de la bas de datos

                conexiones conec = new conexiones();

                string strCn = conec.conexion;

                //se crea un objeto de tipo SqlConnection para realizar la coneccion y en lazarce con sqlserver

                MySqlConnection con = new MySqlConnection(strCn);



                //se crea otro objeto de tipo SqlCommand para mandar la instruccion sql

                MySqlCommand cmd = new MySqlCommand(insertar, con);

                //por cada campo a insertar ay qe validarlo de acuerdo al tipo de datos se sujiere «VarChar» para no tener problemas



                cmd.Parameters.Add("?url", MySql.Data.MySqlClient.MySqlDbType.VarChar).Value = this.textBox1.Text;

                cmd.Parameters.Add("?tipo", MySql.Data.MySqlClient.MySqlDbType.VarChar).Value = this.comboBox1.Text;

                //una ves validados los parametros se apertura la conexion y  se usa el try para cachar cualquier error que ocurra durante la conexion

                con.Open();

                try

                {

                    cmd.ExecuteNonQuery();

                    leer();

                }

                catch (Exception exc)

                {

                    throw new Exception("Error al insertar datos",exc);

                }

                finally

                {

                    con.Close();

                }

                //una ves realizado la inserccion del registro con exito se manda el mensaje de confirmacion

                MessageBox.Show("Informacion almacenada correctamente", "Joshyba");

            }

        }



Debido a que las rutas no funciona con una diagonal si no con dos hemos creado una función que lo hace:

        private string modificarurl(string url)

        {



            return url.Replace("\\", "\\\\");

        }



Y ahora viene lo mas importante abrir el dichoso archivo para ello vamos a valernos del dobleclic y de processstart asi:

        private void dataGridView1_DoubleClick(object sender, EventArgs e)

        {

            DataGridViewRow row = dataGridView1.CurrentRow;

            //MessageBox.Show(Application.LocalUserAppDataPath);

            //MessageBox.Show(Application.StartupPath);

            //string dir = Application.StartupPath;

            string url = /*dir +*/ row.Cells[0].Value.ToString();

            MessageBox.Show(modificarurl(url));

            if (row != null)

            {

                switch(row.Cells[1].Value.ToString())

                {

                    case "pdf":

                        Process.Start("acrord32.exe", modificarurl(url));

                        break;

                    case "word":

                        Process.Start("winword.exe", modificarurl(url));

                        break;

                    case "excel":

                        Process.Start("excel.exe", modificarurl(url));

                        break;

                    case "imagen":

                        Process.Start("dllhost.exe", modificarurl(url));

                        break;

                    case "txt":

                        Process.Start("wordpad.exe", modificarurl(url));

                        break;

                    case "internet":

                        Process.Start("firefox.exe", modificarurl(url));

                        break;  

                }

            }

        }



Y eso es todo. Ahora adaptenlo a sus necesidades. Saludos desde Chiapa de Corzo; Mexico, su amigo Joshyba.









Visita mis otras paginas:

Comentarios

  1. Hola y no existe una forma de validar el documento (word, pdf ,txt , JPG .XLS), cuando este se ingresa con espacio antes de insertarse ,
    dentro del texbox ruta .

    ya que cuando se abre da error de ruta y no abre el documento .

    gracias

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Juego del ahorcado en C# (C Sharp)

RompeCabezas - Juego 1 - VC# 2012

Escribiendo en los TextField de un Pdf con Visual Basic y iTextSharp