[ad_1]
¡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?
[ad_2]
コメント