2011-01-31 14 views

Respuesta

15

usted tiene dos problemas:

  1. El (comprensible) confusión sobre el tipo de datos Image en SQL Server. En realidad, este es solo un objeto binario grande (un BLOB en lenguaje común). Para guardar una imagen (o cualquier otra cosa) en esta columna, primero debe convertirla a byte[], luego almacenar esa matriz de bytes en la columna.
  2. Está utilizando el tipo de datos Image, que está en desuso. Si tiene control sobre este diseño, cámbielo para usar varbinary(MAX). Mientras que el tipo Image aún se encuentra en SQL Server 2008 R2, se eliminará de futuras versiones en algún momento.

Para obtener una byte[] que representa la imagen, pruebe esto:

byte[] data; 

using(System.IO.MemoryStream stream = new System.IO.MemoryStream()) 
{ 
    image.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); 
    data = stream.ToArray(); 
} 

La variable data ahora contiene los datos binarios de la imagen, y se puede usar eso como su valor de parámetro. Hay pasos adicionales que puede seguir aquí (guardarlos en otro formato como JPEG, por ejemplo), pero al menos esto debería ayudarlo a comenzar.

Al recuperar los datos, también volverá como byte[], por lo que tendrá que convertirlo en una imagen de nuevo.

byte[] data = ...; 

Image image = Image.FromStream(new System.IO.MemoryStream(data)); 
+1

Voy a intentar su solución señor, por un tiempo ... – yonan2236

+0

jeje, no puedo conseguirlo – yonan2236

+1

@ yonan2236: ¿Puede ser más específico ...? –

0

El error está bastante claro, no hay conversión de un objeto Imagen GDI a una matriz de bytes (que es lo que el La imagen del tipo de columna de datos de SQL Server realmente lo es). Necesita convertir su objeto de Imagen en una matriz de bytes antes de agregarlo como parámetro.

Cuestiones relacionadas