J'ai pensé que j'avais la solution, maintenant je lance une nouvelle erreur. J'essaie de stocker et de récupérer des images dans MS Access via VB.NET. Je sais, je sais, garder les images dans la structure du fichier serait un meilleur moyen. Pas mon appel et les spécifications ne peuvent pas être changées. J'ai eu de l'aide de jmcilhinney (merci!), Semble que je peux obtenir l'image dans une table d'accès. Mais je n'arrive pas à sauvegarder le fichier sur le disque. La dernière ligne de code (picture2.Save) jette l'erreur suivante:VB.NET - Stockage/Récupération de Blobs (images) dans Access
"Une exception non gérée du type 'System.Runtime.InteropServices.ExternalException' a eu lieu dans System.Drawing.dll"
« Informations supplémentaires : Une erreur générique s'est produite dans GDI + "
C'est vraiment ... Générique. Voici mon code, toute aide serait grandement appréciée !!!
'Put the image into Access
Dim connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\jason_000\Documents\System.accdb;Persist Security Info=False;")
Dim command As New OleDbCommand("INSERT INTO DATATABLE (FilePath, FileName, FileObject) VALUES (@FilePath, @FileName, @Picture)", connection)
Dim Picture As Image = Image.FromFile("C:\Satan.jpg")
connection.Open()
'Create an empty stream in memory.
Using stream As New IO.MemoryStream
'Fill the stream with the binary data from the Image.
Picture.Save(stream, Imaging.ImageFormat.Jpeg)
'Get an array of Bytes from the stream and assign to the parameter.
command.Parameters.AddWithValue("@FilePath", "C:\")
command.Parameters.AddWithValue("@FileName", "Satan.jpg")
command.Parameters.AddWithValue("@Picture", stream.GetBuffer())
End Using
command.ExecuteNonQuery()
connection.Close()
'Get The Image Out of Access
Dim connection2 As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\jason_000\Documents\System.accdb;Persist Security Info=False;")
Dim command2 As New OleDbCommand("SELECT FileObject FROM DataTable WHERE PK = @ID", connection2)
command2.Parameters.AddWithValue("@ID", 4)
connection2.Open()
Dim pictureData As Byte() = DirectCast(command2.ExecuteScalar(), Byte())
connection2.Close()
Dim picture2 As Image
'Create a stream in memory containing the bytes that comprise the image.
Using stream As New IO.MemoryStream(pictureData)
'Read the stream and create an Image object from the data.
picture2 = Image.FromStream(stream)
End Using
picture2.Save("C:\Users\jason_000\Desktop\SatansBack.jpg")
@downvoter vraiment? Quel est le problème avec cette question? –
Pas de doute. Quelqu'un a été downvoting chaque poste que je fais. Il va probablement downvote ce commentaire LOL! –
cette erreur est parce que vous fermez le flux avant de sauvegarder l'image. Avec les images et les bitmaps créés à partir d'un flux, le flux doit rester ouvert pendant toute la durée de vie de l'image. Voir [remarques à MSDN] (http://msdn.microsoft.com/en-us/library/93z9ee4x.aspx). Déplacez le SAVE vers le haut à l'intérieur de l'UTILISATION et cette partie fonctionnerait. La réponse ci-dessous est une meilleure alternative pour couper l'homme du milieu. – Plutonix