Comment stocker des images dans la base de données du serveur MS SQL à partir de l’application de formulaire gagnant VB.NET avec un espace de base de données minimal ?

la programmation


Bonjour!
Bonne journée à tous,

J’ai un projet de formulaire Windows VB.Net avec MS SQL Server comme base de données principale. Je stocke des images dans la base de données à partir de l’application. Ceci est requis par le client, par exemple lorsqu’un utilisateur publie un bon de paiement, il doit alors stocker certains documents manuels comme preuves à l’appui de la transaction. Tout va bien. Les images sont stockées et récupérées parfaitement. Mais de ce fait, la taille de la base de données augmente beaucoup plus que prévu.
Maintenant, je veux savoir comment puis-je effectuer la même tâche en occupant le moins possible le stockage de la base de données.

Si quelqu’un peut m’aider à cet égard, je lui en serai très reconnaissant.

Merci et salutations.

Ce que j’ai essayé :

Tout d’abord, j’insère une image dans le contrôle PictureBox en parcourant Windows à l’aide d’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

Ensuite, pour stocker l’image, j’utilise le code suivant.

  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

Pour convertir l’image en octet, j’ai écrit une fonction suivante nommée “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

Solution 2

Le stockage d’images directement dans une base de données peut entraîner une augmentation de la taille de la base de données, comme vous l’avez remarqué. Pour minimiser le stockage de la base de données, une approche courante consiste à stocker les images sous forme de fichiers sur le serveur. file system et stocker les références (relative path) dans la base de données. De cette façon, seuls les chemins sont stockés dans la base de données, réduisant ainsi la taille globale de la base de données.

Solution 1

Ne pourriez-vous pas simplement donner à l’image un nom unique, l’enregistrer sur le serveur en tant que fichier, puis stocker uniquement une référence au fichier dans la base de données ?

コメント

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