[Solucionado en IRC]'Guardar archivo en campo VarBinarycmd.CommandText = "INSERT INTO tabla (name, binario) VALUES (@name, @bytes)"cmd.Parameters.Add("@name", SqlDbType.NVarchar).Value = "nombre_De_Archivo"cmd.Parameters.Add("@bytes", SqlDbType.VarBinary).Value = IO.File.GetAllBytes("path_archivo")cmd.Connection = concon.Open()cmd.ExecuteNonQuery()con.Close()Saludos!
Private Sub Basededatos() 'se declara la variable bytes para convertir el archivo a byte Dim bytes() As Byte = IO.File.ReadAllBytes(OpenFileDialog.FileName) 'la conexion.. Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection(cadenaconexion) Dim cmd As SqlClient.SqlCommand = New SqlClient.SqlCommand 'se iguala el command.connection a la conexion cmd.Connection = con 'se abre la conexion con.Open() 'se introducen los datos en las tablas cmd.CommandText = "INSERT INTO tbl_principal(nombre, binarios) VALUES (@nombre, @binarios)" cmd.Parameters.Add("@nombre", SqlDbType.NVarChar).Value = TXTNombre.Text 'obtiene el dato de un txt cmd.Parameters.Add("@binarios", SqlDbType.VarBinary).Value = bytes 'obtiene el dato de la variable byte cmd.ExecuteNonQuery() con.Close() End Sub Private Sub BtnBuscar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnBuscar.Click 'el filtro del OPF para cualquier archivo OpenFileDialog.Filter = "*.* | *.*" 'se ejecuta If OpenFileDialog.ShowDialog = DialogResult.OK Then Dim modstrnombre As String modstrnombre = OpenFileDialog.FileName txtruta.Text = OpenFileDialog.FileName Basededatos() End If End Sub
'Para Buscar Fotos al cargar el form de la Row Seleccionada Sub BuscaFoto() Try strConexion.subConexON() 'Abre conexion Dim Sql As String = "SELECT * FROM tb_transporte WHERE IDUNIDAD=" & Me.txtUnidad.Text & "" Dim lector As SqlDataReader If strConexion.con.State = ConnectionState.Open Then 'LEER DE BD SQL Y PASA EL VALOR A LAS VARIABLES Dim sqlComando As New SqlCommand(Sql, strConexion.con) lector = sqlComando.ExecuteReader While lector.Read Imag = CType(lector("FOTO"), Byte()) Me.PictureBox1.Image = Bytes_Imagen(Imag) End While Else MsgBox("No se encuentra el la base de datos, Verifiquelo Porfavor") 'Aqui puedes poner la ruta de una imagen refrencia sin foto o archivo End If 'Cierro conexion - Consulta strConexion.subConexOFF() Catch ex As Exception 'Para saber error de busqueda MessageBox.Show(ex.Message) End Try End Sub
Sub subExtraeImagen() Try Dim saveImage As New SaveFileDialog 'Este es el SaveFileDialog Dim ruta As String = "" 'Para tener la ruta de la imagen saveImage.Title = "Guardar imagen como..." 'Título de la ventana saveImage.Filter = "Imagen BMP (*.bmp)|*.bmp|Imagen JPG (*.jpg)|*.jpg|Imagen PNG (*.png)|*.png" 'Los formatos en que se guardará la imagen If saveImage.ShowDialog() = Windows.Forms.DialogResult.OK Then 'Recuperar la ruta de la imagen si no está vacía If Not String.IsNullOrEmpty(saveImage.FileName) Then ruta = saveImage.FileName Dim myImg As Image 'Objeto Image para guardar la imagen del Picture Dim extension As String = ruta.Substring(ruta.Length - 3, 3) 'Recuperar los ultimos 3 caracteres de la extensión myImg = PictureBox1.Image 'Guardar la imagen del PictureBox en el objeto Image Select Case extension Case "bmp" myImg.Save(ruta, Imaging.ImageFormat.Bmp) 'Guardar en formato BMP Case "jpg" myImg.Save(ruta, Imaging.ImageFormat.Jpeg) 'Guardar en formato JPG Case "png" myImg.Save(ruta, Imaging.ImageFormat.Png) 'Guardar en formato PNG End Select End If Catch ex As Exception MsgBox("Ocurrió el siguiente error: " & ex.Message, MsgBoxStyle.Critical, "Informacion - v1.0!") End Try End Sub
"SELECT * FROM tb_transporte WHERE IDUNIDAD=" & Me.txtUnidad.Text & ""
Si es verdad porque puede filtrar mucho, no es una consulta segura, poden hacerlo con el stored es mas seguro. Ademas del *.
Imag = CType(lector("FOTO"), Byte()) Me.PictureBox1.Image = Bytes_Imagen(Imag)
Imag = CType(lector("FOTO"), Byte())
Me.PictureBox1.Image = Bytes_Imagen(Imag)
Dim byteImage() As Byte = CType(reader.Item("binariosImage"), Byte())Dim msImage As New IO.MemoryStream(byteImage)pbImage.Image = Image.FromStream(msImage)
Código: [Seleccionar]Imag = CType(lector("FOTO"), Byte())lector es un DataReader, está convirtiendo el campo FOTO a array de bytesCódigo: [Seleccionar]Me.PictureBox1.Image = Bytes_Imagen(Imag)Convierte el array a una imagen con la función Bytes_Imagen (que no veo definida) y le asigna la imagen resultante a PictureBox1.
'Declaras una variable publica arriba o como gustes puede ser privadaDim Imag As Byte() 'Parte de las Funciones para convertir un tipo imagen a binario. 'convertir imagen a binario Private Function Imagen_Bytes(ByVal Imagen As Image) As Byte() 'si hay imagen If Not Imagen Is Nothing Then 'variable de datos binarios en stream(flujo) Dim Bin As New MemoryStream 'convertir a bytes Imagen.Save(Bin, Imaging.ImageFormat.Jpeg) 'retorna binario Return Bin.GetBuffer Else Return Nothing End If End Function
'convertir binario a imagen Public Function Bytes_Imagen(ByVal Imagen As Byte()) As Image Try 'si hay imagen If Not Imagen Is Nothing Then 'caturar array con memorystream hacia Bin Dim Bin As New MemoryStream(Imagen) 'con el método FroStream de Image obtenemos imagen Dim Resultado As Image = Image.FromStream(Bin) 'y la retornamos Return Resultado Else Return Nothing End If Catch ex As Exception Return Nothing End Try End Function
Cita de: ravenheart en Junio 04, 2013, 10:21:32 amCódigo: [Seleccionar]Imag = CType(lector("FOTO"), Byte())lector es un DataReader, está convirtiendo el campo FOTO a array de bytesCódigo: [Seleccionar]Me.PictureBox1.Image = Bytes_Imagen(Imag)Convierte el array a una imagen con la función Bytes_Imagen (que no veo definida) y le asigna la imagen resultante a PictureBox1.Listo:Con respecto a la funcion convertir de imagen a bytes y al consultarla volverla a convertir aqui va.Código: [Seleccionar]'Declaras una variable publica arriba o como gustes puede ser privadaDim Imag As Byte() 'Parte de las Funciones para convertir un tipo imagen a binario. 'convertir imagen a binario Private Function Imagen_Bytes(ByVal Imagen As Image) As Byte() 'si hay imagen If Not Imagen Is Nothing Then 'variable de datos binarios en stream(flujo) Dim Bin As New MemoryStream 'convertir a bytes Imagen.Save(Bin, Imaging.ImageFormat.Jpeg) 'retorna binario Return Bin.GetBuffer Else Return Nothing End If End FunctionY para convertir de binario a imagen pongo el ejemplo, cuando quiero consultarla, de igual creas de tipo Public o Private.Código: [Seleccionar]'convertir binario a imagen Public Function Bytes_Imagen(ByVal Imagen As Byte()) As Image Try 'si hay imagen If Not Imagen Is Nothing Then 'caturar array con memorystream hacia Bin Dim Bin As New MemoryStream(Imagen) 'con el método FroStream de Image obtenemos imagen Dim Resultado As Image = Image.FromStream(Bin) 'y la retornamos Return Resultado Else Return Nothing End If Catch ex As Exception Return Nothing End Try End Function