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
- 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:
Hola y no existe una forma de validar el documento (word, pdf ,txt , JPG .XLS), cuando este se ingresa con espacio antes de insertarse ,
ResponderEliminardentro del texbox ruta .
ya que cuando se abre da error de ruta y no abre el documento .
gracias