2009-10-06 5 views
0

J'utilise un SqlDataReader et je suis en train de lire un tableau I converti à partir d'un fichier Access, et dans SQL Server 2008.l'image Lire WMF de SQL Server

Le type de données est maintenant varbinary (max) .

Comment est-ce que je convertis ceci, ainsi je peux l'avoir comme System.Drawing.Image?

C'est un MetaFile Windows et je veux le convertir en PNG ou GIF et l'enregistrer dans le système de fichiers.

Il semble que ce ne sera pas correct car j'obtiens une erreur qu'il ne peut pas convertir en image.

System.Drawing.Image LocationImage = sdr.GetSqlBinary(2) 

Merci.

Répondre

1

Utilisez SqlBytes. Utilisez Image.FromStream pour charger l'image à partir du SqlBytes.Stream. Utilisez CommandBehavior.SequentialAccess sur le lecteur pour charger des images de grande taille:

using (SqlDataReader sdr=cmd.ExecuteReader(CommandBehavior.SequentialAccess)) 
{ 
... 
System.Data.SqlTypes.SqlBytes imageBytes = srd.GetSqBytes(2); 
System.Drawing.Image locationImage = Image.FromStream(imageBytes.Stream); 
} 

Pour enregistrer au format PNG/GIF:

SqlCommand cmd = new SqlCommand("update table set [email protected] where ...") 

MemoryStream streamOutput = new MemoryStream(); 
image.Save(streamOutput, ImageFormat.Png); 
SqlBytes imageBytes = new SqlBytes(streamOutput); 
cmd.Parameters.AddWithValue("@image", imageBytes); 
cmd.ExecuteNonQuery() 

Mise à jour

Je ne suis pas sûr Image.FromStream peut charger Format WMF. Il peut charger EMF afaik, mais je ne suis pas sûr de WMF. Peut-être le routage de l'appel à travers un constructeur Metafile(Stream) va fonctionner, je ne suis pas un expert en graphisme par tout étirement.

+0

merci. Je suis descendu à Image.FromStream, et vous avez raison que cela n'a pas fonctionné, mais en utilisant Metafile (Stream) ne fait pas car ce constructeur veut un tableau d'octets. Donc, je travaille là-dessus. –