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