Guardando imágenes en la BD
Para almacenar una imagen en la base de datos, hemos de leer el archivo que la contiene en forma de stream binario. Para ello, utilizamos la clase
BinaryReader, con la que a partir de un objeto
FileStream podremos obtener los bytes que forman el archivo. En la aplicación de ejemplo, tras pulsar el botón "Guardar Imagen en BD" y elegir un archivo de tipo bmp, jpg o gif, se ejecuta el siguiente código
(en la función btnGuardar_Click de frmImagenes):
VBDim fs As System.IO.FileStream = New FileStream(ofdDataBase.FileName, FileMode.Open, FileAccess.Read)
Dim br As New System.IO.BinaryReader(fs)
Dim abImagen As Byte() = New Byte(fs.Length - 1) {}
br.Read(abImagen, 0, CInt(fs.Length))
br.Close()
fs.Close()
C#System.IO.FileStream fs=new FileStream(ofdDataBase.FileName,FileMode.Open,FileAccess.Read);
System.IO.BinaryReader br = new System.IO.BinaryReader(fs);
byte [] abImagen=new byte[fs.Length];
br.Read(abImagen,0,(int)fs.Length);
br.Close();
fs.Close();
En primer lugar se crea un objeto
FileStream apuntando al fichero que hemos seleccionado. Sobre este objeto se crea un
BinaryReader, con el que podremos leer los bytes del la imagen y almacenarlos en un array de bytes
(abImagen) del mismo tamaño que el fichero. Este array es el que enviamos a la clase DBAccess para ser almacenado mediante el método GuardarImagen:
VBPublic Function GuardarImagen(ByVal abImagen As Byte()) As Boolean
Dim comm As New OleDbCommand("INSERT INTO imagenes (imagen) VALUES (?)", conn)
Dim parImagen As New OleDbParameter("@imagen", OleDbType.VarBinary, abImagen.Length)
parImagen.Value = abImagen
comm.Parameters.Add(parImagen)
conn.Open()
Dim iResultado As Integer = comm.ExecuteNonQuery()
conn.Close()
Return Convert.ToBoolean(iResultado)
End Function
C#public bool GuardarImagen(byte [] abImagen){
OleDbCommand comm=new OleDbCommand("INSERT INTO imagenes (imagen) VALUES (?)",conn);
OleDbParameter parImagen=new OleDbParameter("@imagen", OleDbType.VarBinary,abImagen.Length);
parImagen.Value=abImagen;
comm.Parameters.Add(parImagen);
conn.Open();
int iResultado=comm.ExecuteNonQuery();
conn.Close();
return Convert.ToBoolean(iResultado);
}
En este método, creamos un nuevo objeto
OleDbCommand para ejecutar la INSERT en la base de datos. El parámetro que precisamos enviar es el array de bytes, por lo que en el tipo de dato del parámetro indicamos
VarBinary (datos binarios de longitud variable).
La función devuelve un tipo booleano indicando si se ha efectuado o no la inserción en la base de datos. Como he comentado más arriba, no hay ningún tipo de control de errores en esta aplicación de ejemplo, algo que es indispensable en una real.
Fuente: http://www.elguille.info/colabora/puntoNET/mack_imagenesAccess.htmSaludines!