none
Como guardar una imagen contenida en un picturebox a un campo Image en SQL Server 2005 RRS feed

  • Pregunta

  • Hola!

    Tengo un campo de image en una base de datos de sql server 2005 y una aplicacion para windows en Visual Basic .net

    primero cargo la imagen a un picturebox  y despues la quiero guardar en en el campo de la base de datos pero ya intente varios metodos y todos me marcan error.

    me podrian ayudar?

    Gracias

     

    miércoles, 11 de abril de 2007 21:28

Respuestas

  • Muchas gracias por contestar. finalmente lo resolví de la siguiente manera:

    porque con el Data set me marcaba unos errores.

     

    Sql = "INSERT INTO empleado VALUES (" & _

    " '" & txtNoEmpleado.Text.Trim & "', " & _

    " '" & txtIniciales.Text.Trim & "', " & _

    " '" & txtNombre.Text.Trim & "', " & _

    " '" & txtArea.Text.Trim & "', " & _

    " '" & txtDepto.Text.Trim & "', " & _

    " '" & txtPuesto.Text.Trim & "', " & _

    " @img_foto )"

     

    Command.CommandText = Sql

     

    Dim strBLOBFilePath As String = pbxFoto.ImageLocation.ToString

    Dim fsBLOBFile As New FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read)

    Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte

     

    fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)

    fsBLOBFile.Close()

     

    Dim prm As New SqlParameter("@img_foto", SqlDbType.VarBinary, _

                                                   bytBLOBData.Length, ParameterDirection.Input, False, _

                                                   0, 0, Nothing, DataRowVersion.Current, bytBLOBData)

     

    Command.Parameters.Add(prm)

    Command.ExecuteNonQuery()

     

     

    Saludos

     

    Isabel Cristina

    martes, 17 de abril de 2007 14:19

Todas las respuestas

  • Hola Isabel

    Esto lo utilizo con Access y un Objeto OLE en el tipo de campo, fue un codigo que encontre en Internet para c# y adapte para vb. Espero te sirva

    'Se lee la imagen
    byLeeImagen = dsEmpresas.Tables(0).Rows(0).Item("logo")
    For iPos As Double = 0 To byLeeImagen.GetLength(0) - 1
    msLeeImagen.WriteByte(byLeeImagen(iPos))
    Next
    ptbLogo.Image = Image.FromStream(msLeeImagen)
    '******************************
    'Se guarda la imagen.
    'Se asigna la imagen del picture a una variable MemoryStream
    cmCommand = New OdbcCommand("UpDate P_Empresa_Paga Set Descr = ?, Nit = ?, Logo = ? Where cod_empaga = ?", Conexion)

    Dim msImagenParaBD As New System.IO.MemoryStream
    ptbLogo.Image.Save(msImagenParaBD, System.Drawing.Imaging.ImageFormat.Jpeg)
    cmCommand.Parameters.Add("", otros parametros)
    cmCommand.Parameters.Add("", OdbcType.VarBinary).Value = msImagenParaBD.GetBuffer()
    jueves, 12 de abril de 2007 0:15
  • Hola Isabel,

    Complementando la informacion que nos aporta Daniel, te adjunto otra idea :

     

    Imports System.IO

    Imports System.Data

    Imports System.Data.SqlClient

    Imports System.Drawing.Imaging

     

    Public Class TuClass....

     

        Private MiConexion As SqlConnection = New SqlConnection

        Private MiAdaptador As SqlDataAdapter

        Private MiDataSet As DataSet = New DataSet

        Private _ms As MemoryStream = New MemoryStream

        '

        '

        Private Sub TuSub...

            MiConexion.ConnectionString = "Data Source=.\SQLEXPRESS;Initial Catalog=TuBd;Integra..etc"

            MiAdaptador = New SqlDataAdapter("Select * from TuTabla", MiConexion)

            MiAdaptador.Fill(MiDataSet)

            Dim MiCommandBuilder As SqlCommandBuilder = New SqlCommandBuilder(MiAdaptador)

     

            picImagen.Image = Image.FromFile("C:\TuFoto.jpg")

            picImagen.Image.Save(_ms, ImageFormat.Jpeg)

     

            MiDataSet.Tables(0).Rows(0)("Foto") = _ms.GetBuffer

            MiAdaptador.Update(MiDataSet)

        End Sub

     

    Saludos,

    Pep Lluis,

     

    PD.  Recuerda que es una idea... pero falta probarla!, si te es util o de da alguna excepcion... lo comentamos.

     

    viernes, 13 de abril de 2007 15:16
    Moderador
  • Muchas gracias por contestar. finalmente lo resolví de la siguiente manera:

    porque con el Data set me marcaba unos errores.

     

    Sql = "INSERT INTO empleado VALUES (" & _

    " '" & txtNoEmpleado.Text.Trim & "', " & _

    " '" & txtIniciales.Text.Trim & "', " & _

    " '" & txtNombre.Text.Trim & "', " & _

    " '" & txtArea.Text.Trim & "', " & _

    " '" & txtDepto.Text.Trim & "', " & _

    " '" & txtPuesto.Text.Trim & "', " & _

    " @img_foto )"

     

    Command.CommandText = Sql

     

    Dim strBLOBFilePath As String = pbxFoto.ImageLocation.ToString

    Dim fsBLOBFile As New FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read)

    Dim bytBLOBData(fsBLOBFile.Length() - 1) As Byte

     

    fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length)

    fsBLOBFile.Close()

     

    Dim prm As New SqlParameter("@img_foto", SqlDbType.VarBinary, _

                                                   bytBLOBData.Length, ParameterDirection.Input, False, _

                                                   0, 0, Nothing, DataRowVersion.Current, bytBLOBData)

     

    Command.Parameters.Add(prm)

    Command.ExecuteNonQuery()

     

     

    Saludos

     

    Isabel Cristina

    martes, 17 de abril de 2007 14:19
  • hola

     

    Supongo que estas haciendo una base de datos de empleados, me gustaria saber si puedes ayudarme ya que quisiera hacer mi tesis referente a este tema.

     

    Saludos

    martes, 12 de abril de 2011 21:47
  • Excelente aportacion ISABEL muchas gracias
    viernes, 22 de julio de 2011 5:23
  • Hola Isabel

    Esto lo utilizo con Access y un Objeto OLE en el tipo de campo, fue un codigo que encontre en Internet para c# y adapte para vb. Espero te sirva

    'Se lee la imagen
    byLeeImagen = dsEmpresas.Tables(0).Rows(0).Item("logo")
    For iPos As Double = 0 To byLeeImagen.GetLength(0) - 1
    msLeeImagen.WriteByte(byLeeImagen(iPos))
    Next
    ptbLogo.Image = Image.FromStream(msLeeImagen)
    '******************************
    'Se guarda la imagen.
    'Se asigna la imagen del picture a una variable MemoryStream
    cmCommand = New OdbcCommand("UpDate P_Empresa_Paga Set Descr = ?, Nit = ?, Logo = ? Where cod_empaga = ?", Conexion)

    Dim msImagenParaBD As New System.IO.MemoryStream
    ptbLogo.Image.Save(msImagenParaBD, System.Drawing.Imaging.ImageFormat.Jpeg)
    cmCommand.Parameters.Add("", otros parametros)
    cmCommand.Parameters.Add("", OdbcType.VarBinary).Value = msImagenParaBD.GetBuffer()
    HOLA, TALVEZ YO NO SE MUCHO, Y MAS AUN, LO POCO QUE SE, ES POR INICIATIVA PROPIA, YO PUEDO GUARDAR UNA IMAGEN EN ACCESS Y TRAERLA DEVUELTA CON UNA REFERENCIA, PERO EN TU EJEMPLO NO ENTENDI NADA, LA PARTE QUE DICE "OTROS PARAMETROS", SE REFIERE A "DESCR=?" Y "NIT=?" O NO.
    jueves, 26 de abril de 2012 21:27