Ο στόχος: να διαβάσω από ένα SQL table (η βάση είναι από Microsoft Dynamics NAV 2009 SP1 ERP) τον κωδικό του είδους και την εικόνα του και να το αποθηκεύσω ως jpg στον σκληρό δίσκο με το όνομα του κωδικού του είδους.
Το πρόβλημα: όταν κάνω ανάθεση στην μεταβλητή τύπου image το MemoryStream παίρνω πίσω "parameter is not valid".
Η προσπάθεια επίλυσης: έφτιαξα ένα δικό μου νέο πίνακα με τα ίδια field types και ανέβασα data ίδια με αυτά που είναι στο ERP table, και η ίδια ρουτίνα δουλεύει κανονικά και κάνει save το αρχείο στο δίσκο.
Μήπως έχει να κάνει με τον τρόπο που το αποθηκεύει το NAV κατα την εισαγωγή του από τον χρήστη, και το κάνει "unusable" ως image;
Ιδού η απλή ρουτίνα:
Using conn As New SqlConnection("integrated Security=SSPI;Persist Security Info=False;Initial Catalog=myDB;Data Source=myServer")
Dim sql As String = " SELECT TOP 10 No_, Picture FROM myTable WHERE DATALENGTH([Picture]) <> 0 "
Dim cmd As New SqlCommand(sql, conn)
conn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader()
While dr.Read()
Dim bytes As Byte() = DirectCast(dr("Picture"), Byte())
Dim memStream As New MemoryStream(bytes)
Try
Dim MyImage As Image = Image.FromStream(memStream)
MyImage = New Bitmap(MyImage, 200, 250)
MyImage.Save("d:\" + dr("No_") + ".jpg", ImageFormat.Jpeg)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End While
End Using
Υπάρχει άλλος τρόπος εκτός από το MemoryStream;
Οποιαδήποτε βοήθεια θα την εκτιμούσα! :)
VI