none
Ayuda para guardar una imagen en vacio RRS feed

  • Pregunta

  • Hola a todos no se si me dejo explicar lo que pasa es que tengo un proyecto, y  guarda modifica elimina todo esta ok, me guarda imagenes y todo, el problema esta; que pasa si yo no deseo guardar una imagen , Eh alli mi problema que me sale error.

    Entonces solo necesito que me ayuden o me puedan corregir que poner, en la tabla  si esta activado permitir valores nulos y son datos binarios,

    La idea es que permita guardar la imagen como no guardar imagen, no siempre sea necesario poner imagen.

    el codigo actual trabaja bien y guarda imagenes y todos los datos pero si no coloco imgen sale eso.

    el codigo de guardar es:

    Private Sub btnGuardar_Click(sender As Object, e As EventArgs) Handles btnGuardar.Click
            If txtCodigo.Text.Trim().Length = 0 Or
                Fecha.Text.Trim().Length = 0 Or
                cboNombre.Text.Trim().Length = 0 Or
                txtUm.Text.Trim().Length = 0 Or
                cboProveedor.Text.Trim().Length = 0 Or
                txtModelo.Text.Trim().Length = 0 Or
                txtSerie.Text.Trim().Length = 0 Or
                cboEstado.Text.Trim().Length = 0 Or
                txtDetalle.Text.Trim().Length = 0 Or
                txtPrecio.Text.Trim().Length = 0 Or
                txtTipoM.Text.Trim().Length = 0 Then
                lblMensaje.Text = "Complete los campos"
                Exit Sub
            End If
            Using cnx As New SqlConnection(ConfigurationManager.ConnectionStrings("cnxString").ToString())
                If contador_para_guardar = 1 Then
                    Try
                        cnx.Open()
                        Dim textosqIngresar As New String(CType("Insert into Productos (CodProducto,FechaRegistro,NomProducto,UM,Marca,Proveedor,Modelo,Serie,Estado,Detalle,Precio,Stock,TipoMoneda,Imagen,IdCategoria,Usuario)values(@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m,@n,@o,@p)", Char()))
                        Dim cmda As New SqlCommand(textosqIngresar, cnx)
                        cmda.Parameters.AddWithValue("@a", Me.txtCodigo.Text)
                        cmda.Parameters.AddWithValue("@b", Me.Fecha.Text)
                        cmda.Parameters.AddWithValue("@c", Me.cboNombre.Text)
                        cmda.Parameters.AddWithValue("@d", Me.txtUm.Text)
                        cmda.Parameters.AddWithValue("@e", Me.txtMarca.Text)
                        cmda.Parameters.AddWithValue("@f", Me.cboProveedor.Text)
                        cmda.Parameters.AddWithValue("@g", Me.txtModelo.Text)
                        cmda.Parameters.AddWithValue("@h", Me.txtSerie.Text)
                        cmda.Parameters.AddWithValue("@i", Me.cboEstado.Text)
                        cmda.Parameters.AddWithValue("@j", Me.txtDetalle.Text)
                        cmda.Parameters.AddWithValue("@k", Me.txtPrecio.Text)
                        cmda.Parameters.AddWithValue("@l", Me.txtStock.Text)
                        cmda.Parameters.AddWithValue("@m", Me.txtTipoM.Text)
                        Dim Imag As Byte()
                        Imag = Imagen_Bytes(Me.Imagen.Image)
                        cmda.Parameters.AddWithValue("@n", Imag)
                        cmda.Parameters.AddWithValue("@o", Me.IdCat.Text)
                        cmda.Parameters.AddWithValue("@p", Tablero.lblUsuario.Text)
                        If cnx.State = ConnectionState.Open Then
                            cmda.ExecuteNonQuery()
                        End If
                        cnx.Close()
                        lblMensaje.Text = ("Datos Guardados Correctamente")
    
                        pre = 0
                        Desactivo()
                        contador_para_guardar = 0
                        cnx.Open()
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                End If
                If contador_para_guardar = 2 Then
                    Try
                        cnx.Open()
                        Dim textoseditar As New String(CType("Update Productos Set CodProducto =@a,FechaRegistro =@b,NomProducto=@c,UM=@d,Marca=@e,Proveedor=@f,Modelo=@g,Serie=@h,Estado=@i,Detalle=@j,Precio=@k,TipoMoneda=@m,Imagen=@n,IdCategoria=@o,Usuario=@p where CodProducto =@a", Char()))
                        Dim cmdb As New SqlCommand(textoseditar, cnx)
                        cmdb.Parameters.AddWithValue("@a", Me.txtCodigo.Text)
                        cmdb.Parameters.AddWithValue("@b", Me.Fecha.Text)
                        cmdb.Parameters.AddWithValue("@c", Me.cboNombre.Text)
                        cmdb.Parameters.AddWithValue("@d", Me.txtUm.Text)
                        cmdb.Parameters.AddWithValue("@e", Me.txtMarca.Text)
                        cmdb.Parameters.AddWithValue("@f", Me.cboProveedor.Text)
                        cmdb.Parameters.AddWithValue("@g", Me.txtModelo.Text)
                        cmdb.Parameters.AddWithValue("@h", Me.txtSerie.Text)
                        cmdb.Parameters.AddWithValue("@i", Me.cboEstado.Text)
                        cmdb.Parameters.AddWithValue("@j", Me.txtDetalle.Text)
                        cmdb.Parameters.AddWithValue("@k", Me.txtPrecio.Text)
                        cmdb.Parameters.AddWithValue("@l", Me.txtStock.Text)
                        cmdb.Parameters.AddWithValue("@m", Me.txtTipoM.Text)
                        Dim Imag As Byte()
                        Imag = Imagen_Bytes(Me.Imagen.Image)
                        cmdb.Parameters.AddWithValue("@n", Imag)
                        cmdb.Parameters.AddWithValue("@o", Me.IdCat.Text)
                        cmdb.Parameters.AddWithValue("@p", Me.txtUserEdita.Text)
    
                        If cnx.State = ConnectionState.Open Then
                            cmdb.ExecuteNonQuery()
                        End If
                        cnx.Close()
                        lblMensaje.Text = ("Datos modificados Correctamente")
                        Desactivo()
                        contador_para_guardar = 0
                    Catch ex As Exception
                        MsgBox(ex.Message)
                    End Try
                End If
                btnGuardar.Enabled = False
                btnNuevo.Enabled = True
                btnEditar.Enabled = True
                btnEliminar.Enabled = False
                Call Limpiar()
                'Desactivo()
                txtCodigo.Enabled = False
            End Using
        End Sub

    En base a mi codigo que modificacion debo hacerle sin que afecte lo que actualmente ya trabaja solo falta  que permita agregar una imagen no obligatorio

    • Editado Javier Roque martes, 29 de noviembre de 2016 15:16
    martes, 29 de noviembre de 2016 15:11

Respuestas

  • Hola Javier RoCas,

    Entonces tienes que validar si el PictureBox contiene una imagen o no, si no la tiene tendrías que actualizar a un valor NULL.

    Podrías hacer algo como :

    'Si no hay imagen
    If Imagen.Image Is Nothing Then
        cmda.Parameters.Add("@n", SqlDbType.Binary).Value = DBNull.Value
    Else
        cmda.Parameters.Add("@n", SqlDbType.Binary).Value = Imagen_Bytes(Me.Imagen.Image)
    End If

    Donde entiendo que Imagen es el nombre del PictureBox.

    O podrías usar IF(..)

    'Si el PictureBox Imagen no tiene imagen asignada NULL, caso contrario obtiene los Bytes()
    .AddWithValue("@n", If(Imagen Is Nothing, SqlBinary.Null, Imagen_Bytes(Me.Imagen.Image)))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Javier Roque martes, 29 de noviembre de 2016 22:10
    martes, 29 de noviembre de 2016 18:15

Todas las respuestas

  • Hola Javier RoCas,

    Entonces tienes que validar si el PictureBox contiene una imagen o no, si no la tiene tendrías que actualizar a un valor NULL.

    Podrías hacer algo como :

    'Si no hay imagen
    If Imagen.Image Is Nothing Then
        cmda.Parameters.Add("@n", SqlDbType.Binary).Value = DBNull.Value
    Else
        cmda.Parameters.Add("@n", SqlDbType.Binary).Value = Imagen_Bytes(Me.Imagen.Image)
    End If

    Donde entiendo que Imagen es el nombre del PictureBox.

    O podrías usar IF(..)

    'Si el PictureBox Imagen no tiene imagen asignada NULL, caso contrario obtiene los Bytes()
    .AddWithValue("@n", If(Imagen Is Nothing, SqlBinary.Null, Imagen_Bytes(Me.Imagen.Image)))

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta Javier Roque martes, 29 de noviembre de 2016 22:10
    martes, 29 de noviembre de 2016 18:15
  • Imagen es el nombre del PictureBox

    Gracias me sirvio utilice:

    If Imagen.Image Is Nothing Then
     cmdb.Parameters.Add("@n", SqlDbType.Binary).Value = DBNull.Value
    Else
     cmdb.Parameters.Add("@n", SqlDbType.Binary).Value = Imag
     End If

    • Editado Javier Roque martes, 29 de noviembre de 2016 22:11
    martes, 29 de noviembre de 2016 22:01