Imagenes

06/03/2007 - 20:39 por Edwin Rivera | Informe spam
Hola, tengo un gran dolor de cabeza con las imagens(fotos), tengo una base de
datos con una tabla Alumnos y dos campos, apellidos(varchar 50) y fotos
(image) , como puedo insertar datos en la tabla alumno por medio del visual
studio .net 2003 me refiero que estoy usando en mi formulario un textbox
para el campo apellido(textbox1.text) y una picturebox(picturebox.?) para la
imagen, que propiedad puedo usar para insertar el picturebox ya que he
intentado con la propiedad BackgroundImage me sale el mensaje de error
bueno espero que han entendido lo que quiero es guardar una imagen en la
base de datos con que propiedad lo guardo al igual que ver la foto en una
busqueda .
si no es mucha molestia me pueden enviar una base de datos para guardar foto
ye insertat y tambien visualizar.
o la direccion donde se ubica.
gracias
 

Leer las respuestas

#1 Luis Miguel Blanco
07/03/2007 - 12:02 | Informe spam
Hola Edwin

Te adjunto un par de métodos que realizan una grabación y recuperación
respectivamente de una imagen en una base de datos. Para la selección de la
imagen a grabar, se utiliza un cuadro de diálogo para elegir un archivo que
contiene la imagen, abrirla, pasarla a un array de bytes y finalmente grabar
los datos a un nuevo registro de una tabla.

Para recuperar uno de estos registros, incluyendo el campo con la imagen, se
utiliza un objeto Command que devuelve un DataReader, y a través de objetos
stream, se recupera el contenido de la imagen para grabarla de nuevo a un
archivo o volcarla a un PictureBox.

'////////////////////////////////////////////////////
Private Sub btnGrabar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnGrabar.Click
Dim nIDFoto As Integer
Dim oFileStream As FileStream
Dim xDlgResult As DialogResult
Dim aBytImagen() As Byte
Dim cnConexion As SqlConnection
Dim cmdComando As SqlCommand
Dim parIDFoto As SqlParameter
Dim parNombre As SqlParameter
Dim parFoto As SqlParameter
Dim sSQL As String
Dim oFileInfo As FileInfo

' validaciones
If Me.txtIDFoto.Text = String.Empty Then
MessageBox.Show("Introducir identificador de foto")
Return
End If

Try
nIDFoto = Integer.Parse(Me.txtIDFoto.Text)
Catch oException As Exception
Me.txtIDFoto.Text = String.Empty
MessageBox.Show("El identificador debe ser numérico")
Return
End Try

' cuadro de diálogo para seleccionar archivo
Me.dlgAbrirArchivo.InitialDirectory = Application.StartupPath &
"\ArchivosFotos"
xDlgResult = Me.dlgAbrirArchivo.ShowDialog()

If xDlgResult = DialogResult.OK Then
' abrir el archivo con un objeto stream
oFileStream = New FileStream(Me.dlgAbrirArchivo.FileName,
FileMode.Open)
' crear un array byte que tenga el tamaño del archivo
aBytImagen = New Byte(oFileStream.Length - 1) {}
' leer con el stream el contenido del archivo
' y volcarlo al array
oFileStream.Read(aBytImagen, 0, oFileStream.Length - 1)
oFileStream.Close()

oFileInfo = New FileInfo(Me.dlgAbrirArchivo.FileName)

sSQL = "INSERT INTO Fotos VALUES (@IDFoto, @Nombre, @Foto)"
cnConexion = New SqlConnection("data source=localhost;initial
catalog=InfoViajes;uid=sa;pwd='';")
cmdComando = New SqlCommand
cmdComando.Connection = cnConexion
cmdComando.CommandType = CommandType.Text
cmdComando.CommandText = sSQL

parIDFoto = New SqlParameter("@IDFoto", SqlDbType.Int)
parIDFoto.Value = Convert.ToInt32(Me.txtIDFoto.Text)
cmdComando.Parameters.Add(parIDFoto)

parNombre = New SqlParameter("@Nombre", SqlDbType.VarChar, 50)
parNombre.Value = oFileInfo.Name
cmdComando.Parameters.Add(parNombre)

' para pasar la imagen a la base de datos
' definimos un parámetro de tipo Image
' y le pasamos el array byte que contiene
' la información binaria de la imagen
parFoto = New SqlParameter("@Foto", SqlDbType.Image)
parFoto.Value = aBytImagen
cmdComando.Parameters.Add(parFoto)

cnConexion.Open()
cmdComando.ExecuteNonQuery()
cnConexion.Close()

MessageBox.Show("Imagen grabada en la base de datos")
End If
End Sub

'-

Private Sub btnRecuperar_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles btnRecuperar.Click
Dim nIDFoto As Integer
Dim xDlgResult As DialogResult
Dim sSQL As String
Dim cnConexion As SqlConnection
Dim cmdComando As SqlCommand
Dim drFotos As SqlDataReader
Dim sNombreFoto As String
Dim aBytImagen() As Byte
Dim oFileStream As FileStream
Dim oMemoryStream As MemoryStream
Dim bmpImagen As Bitmap

' validaciones
If Me.txtIDFoto.Text = String.Empty Then
MessageBox.Show("Introducir identificador de foto")
Return
End If

Try
nIDFoto = Integer.Parse(Me.txtIDFoto.Text)
Catch oException As Exception
Me.txtIDFoto.Text = String.Empty
MessageBox.Show("El identificador debe ser numérico")
Return
End Try

' crear sentencia, conexión y comando para obtener la imagen de la base
de datos
sSQL = "SELECT Nombre, Foto FROM Fotos WHERE IDFoto = " &
Me.txtIDFoto.Text
cnConexion = New SqlConnection("data source=localhost;initial
catalog=InfoViajes;uid=sa;pwd='';")
cmdComando = New SqlCommand
cmdComando.Connection = cnConexion
cmdComando.CommandType = CommandType.Text
cmdComando.CommandText = sSQL

cnConexion.Open()
drFotos = cmdComando.ExecuteReader(CommandBehavior.SingleRow)

If drFotos.Read() Then
sNombreFoto = drFotos("Nombre")
' recuperar datos binarios de la foto
aBytImagen = drFotos("Foto")
End If

drFotos.Close()
cnConexion.Close()

If IsNothing(sNombreFoto) Then
MessageBox.Show("No hay foto con ese identificador")
Return
End If

' abrir cuadro de diálogo para grabar la foto en un archivo
Me.dlgGrabarArchivo.InitialDirectory = Application.StartupPath &
"\FotosRecuperadasBD\"
Me.dlgGrabarArchivo.FileName = sNombreFoto
xDlgResult = Me.dlgGrabarArchivo.ShowDialog()

If xDlgResult = DialogResult.OK Then
' crear un objeto stream de tipo archivo y escribir en él
' el array byte que contiene los datos binarios de la imagen
oFileStream = New FileStream(Me.dlgGrabarArchivo.FileName, _
FileMode.CreateNew, FileAccess.Write)
oFileStream.Write(aBytImagen, 0, aBytImagen.Length)
oFileStream.Close()
End If

' crear un objeto stream en memoria conteniendo los datos de la imagen,
' crear un bitmap con el stream y
' visualizar la imagen en un control PictureBox
oMemoryStream = New MemoryStream(aBytImagen)
bmpImagen = New Bitmap(oMemoryStream)
Me.picFoto.Image = bmpImagen
End Sub
'////////////////////////////////////////////////////

Espero que con algunas modificaciones, puedas adaptar el código a tus
necesidades.

Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Edwin Rivera" wrote:

Hola, tengo un gran dolor de cabeza con las imagens(fotos), tengo una base de
datos con una tabla Alumnos y dos campos, apellidos(varchar 50) y fotos
(image) , como puedo insertar datos en la tabla alumno por medio del visual
studio .net 2003 me refiero que estoy usando en mi formulario un textbox
para el campo apellido(textbox1.text) y una picturebox(picturebox.?) para la
imagen, que propiedad puedo usar para insertar el picturebox ya que he
intentado con la propiedad BackgroundImage me sale el mensaje de error
bueno espero que han entendido lo que quiero es guardar una imagen en la
base de datos con que propiedad lo guardo al igual que ver la foto en una
busqueda .
si no es mucha molestia me pueden enviar una base de datos para guardar foto
ye insertat y tambien visualizar.
o la direccion donde se ubica.
gracias

Preguntas similares