Me aparece este error cuando intento guardar mi imagen en la base de datos.Cómo guardar la imagen en una base de datos?
¿Qué estoy haciendo mal?
Aquí está el diseño de mi mesa:
estoy usando Microsoft Server 2008.
Me aparece este error cuando intento guardar mi imagen en la base de datos.Cómo guardar la imagen en una base de datos?
¿Qué estoy haciendo mal?
Aquí está el diseño de mi mesa:
estoy usando Microsoft Server 2008.
usted tiene dos problemas:
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.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));
Una simple búsqueda en Google parece dar la solución a éste: http://www.eggheadcafe.com/community/aspnet/10/10081215/inserting-image-in-sql-server.aspx
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.
+1 para bien documentado. –
es la causa del error? – yonan2236
gran documento tome uno más – Adrian