jun 19, 2010

Enviado por en .NET

Guardar Imagenes en bases de datos usando c#

Hola.
Después de una prolongada ausencia debido a la culminación de mis labores como estudiante, pues haré la primera entrada post-aniversario de Kernel Error.
La cosa es así para un proyecto de la universidad, tuve que guardar imagenes (fotos puntualmente) en una base de datos, en mi caso peculiarmente Microsoft Access (por obligación mas que por gusto).

En otros manejadores de base de datos (como Ms Sql Server) si existe un tipo imagen para las base de datos, pero en Access podemos usar un tipo de dato objeto ole y a los efectos nos servirá. Empezemos.
Primero debemos leer la imagen de alguna manera, yo lo que hice fue poner un OpenFileDialog donde daba la posibilidad de buscar la imagen, luego cuando tenía el nombre del archivo en el FileName del objeto OpenFileDialog procedía a leer la imagen.

using System.IO;
// opf.Filename trae la ruta donde se encuentra la imagen a leer.
FileStream fs = new FileStream(opf.FileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);

teniengo la imagen ya leida la vamos a guardar en un arreglo de bytes y cerramos el FileStream y el BinaryReader

byte[] arr = new byte[fs.Length];
br.Read(arr, 0, (int)fs.Length);
br.Close();
fs.Close();

Hecho esto ahora guardaremos a la base de datos yo usaré OleDbCommand y usaremos un parametro del tipo VarBinary


OleDbCommand cm = new OleDbCommand();
cm.CommandText = "INSERT INTO Registro(foto) VALUES(@foto)";
cm.Connection = miconexion;

OleDbParameter pa = new OleDbParameter();
pa.Value = arr;
pa.OleDbType = OleDbType.VarBinary;
pa.Size = arr.Length;
pa.ParameterName = "@foto";
cm.Parameters.Add(pa);
cm.ExecuteNonQuery();

Listo ya hemos guardado la foto, ahora como la extraemos? supondremos que contamos con un pictureBox y usaremos un MemoryStream para aprovechar la posibilidad de extraer una imagen de un stream

OleDbCommand cm = new OleDbCommand();
cm.CommandText = "SELECT foto FROM Registro";
cm.Connection = miconexion
pictureBox1.Image = Image.FromStream(new MemoryStream((byte[])re["foto"]))

Una muestra del proyecto:

saludos

    Posts Relacionados

    Se ha cerrado los comentarios