¿Cómo almacenar imágenes en la base de datos del servidor MS SQL desde la aplicación Win Form VB.NET con un espacio mínimo en la base de datos?

programación


¡Hola!
Buen día a todos,

Tengo un proyecto de formulario de Windows VB.Net con MS SQL Server como base de datos de back-end. Estoy almacenando imágenes en la base de datos desde la aplicación. Esto lo requiere el cliente, por ejemplo, cuando un usuario publica un comprobante de pago, necesita almacenar algunos documentos manuales como prueba de respaldo de la transacción. Todo va bien. Las imágenes se almacenan y recuperan perfectamente. Pero debido a esto el tamaño de la base de datos está aumentando mucho más de lo esperado.
Ahora quiero saber cómo puedo hacer la misma tarea ocupando el almacenamiento de la base de datos lo mínimo posible.

Si alguien puede ayudar en este sentido, estaré muy agradecido.

Gracias y saludos.

Lo que he probado:

En primer lugar, inserto una imagen en el control PictureBox navegando por Windows usando OpenFileDialog.

Public Sub Select_Picture()
     Try
         OpenFile.ShowDialog()
         Dim PicPath As String = OpenFile.FileName
         MyPicBox.ImageLocation = PicPath
     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try
End Sub

Luego, para almacenar la imagen, utilizo el siguiente código.

  Public Sub SaveImage_()
        Dim SQL_Connection As New SqlConnection
        Try
            Dim MyImage As Image
            MyImage = MyPicBox.Image
            SQL_Connection.ConnectionString = MyConnectionString
            SQL_Connection.Open()
            Dim MyQuery As String = "insert into tbl_Setup_Companies Values(@Image_)"
            Dim MyCommand As SqlCommand
            MyCommand = New SqlCommand(MyQuery, SQL_Connection)
            MyCommand.Parameters.Add(New SqlParameter("@Image_", SqlDbType.Image))
            MyCommand.Parameters("@Image_").Value = ConvertImage(MyImage)
            MyCommand.ExecuteNonQuery()
            SQL_Connection.Close()
Catch ex As Exception
  MessageBox.Show(ex.Message)
End Try
End Sub

Para convertir la imagen en bytes, escribí la siguiente función llamada “ConvertImate”

Public Function ConvertImage(ByVal myImage As Image) As Byte()
        Dim mstream As New MemoryStream
        myImage.Save(mstream, System.Drawing.Imaging.ImageFormat.Jpeg)
        Dim myBytes(mstream.Length - 1) As Byte
        mstream.Position = 0
        mstream.Read(myBytes, 0, mstream.Length)
        Return myBytes
End Function

Solución 1

¿No podría simplemente darle a la imagen un nombre único, guardarla en el servidor como un archivo y luego almacenar solo una referencia al archivo en la base de datos?

コメント

タイトルとURLをコピーしました