6

¿Alguien sabe de un ejemplo sobre cómo almacenar una imagen en una base de datos SQL Server CE?Almacenar una imagen en una base de datos SQL Server CE

¿Qué tipo de datos debe ser la columna? (Supongo que es binario.)

Uso Linq-To-Datasets. ¿Es posible usar eso para poner la imagen en la base de datos y sacarla luego?

Gracias por cualquier consejo.


Aquí es cómo lo hice:

MemoryStream stream = new MemoryStream(); 
myBitmapImage.Save(stream, ImageFormat.Png); 
myInsertLinqToDataSetRow.IMAGE_COLUMN = stream.ToArray(); 

Para cargar de nuevo otra vez que hice esto:

MemoryStream stream = new MemoryStream(myLinqToDataSetRow.IMAGE_COLUMN); 
myBitmapImage.SignatureImage = new Bitmap(stream); 

me encontré con una página en MSDN que dijo que la columna de la Imagen tipo se va y que debe usar varbinary (MAX). Max no es compatible con SQL Server CE, así que lo hice varbinary (8000).

MÁS TARDE NOTA: mientras varbinary (max) no es compatible con SQL Server CE. Varbinary (8000) no es lo suficientemente grande para muchas imágenes. Terminé usando el tipo de imagen a pesar de que está previsto que esté en desuso. Una vez que ms ofrece una alternativa razonable en la plataforma móvil, consideraré cambiar.

Respuesta

5

Aquí es un artículo de MSDN explicando cómo:

http://support.microsoft.com/kb/318639

Por desgracia, el ejemplo es en VB, pero estoy seguro de que usted puede conseguir la idea de cómo hacerlo.

Diría que el tipo de datos binarios estaría bien para almacenar las imágenes.

1

Esta no es una respuesta directa a su pregunta, pero he tenido éxito almacenando el archivo de la imagen (ejemplo: C: \ images \ image1.png) como un valor de cadena en la base de datos en lugar de la imagen sin formato.

Una ventaja de esto es que mantiene el tamaño de la base de datos más pequeño.

Otra es que varias tablas pueden apuntar a las imágenes sin almacenar varias copias de la imagen.

+0

idea razonable si estaba almacenando datos de referencia. Sin embargo, esto es para capturas de pantalla de la ventana actual. Los necesito en la base de datos para mantenerlos organizados. – Vaccano

+0

+1: Realmente no me gusta hacer esto y el mayor problema (las copias múltiples de la imagen) ** puede resolverse simplemente ** creando una tabla Imágenes con una identificación y la imagen. ** Aunque con la futura depreciación del tipo de imagen y las limitaciones en el tamaño varbinary, creo que en realidad es la mejor opción **. Qué triste MS ... – Diego

+0

Algo que descubrí en una de mis aplicaciones para detener la duplicación de la misma imagen es tener información de la imagen en una tabla separada y luego hacer referencia a todo en esa mesa.Tengo el hash de la imagen, el contenido binario y una identificación para ir con él. Una vez que la imagen está en la base de datos, en lugar de duplicar el contenido binario, simplemente agrego otra referencia a esa imagen. – JLopez

5

¿Por qué no utiliza el tipo de imagen? Here es una descripción de tipos, compatible con el servidor sql ce.

Image - de longitud variable de datos binarios con una longitud máxima de 2^30 - 1 (1,073,741,823) bytes.

+5

Porque están en desuso. La página de ayuda dice: ** tipos de datos ntext de texto y de imagen se quitará en una versión futura de Microsoft SQL Server. Evite utilizar estos tipos de datos en el nuevo trabajo de desarrollo y planee modificar las aplicaciones que actualmente los utilizan. Use nvarchar (max), varchar (max) y varbinary (max) en su lugar. ** (Tomado de: http://msdn.microsoft.com/en-us/library/ms187993.aspx) – Vaccano

+1

Aunque lo hice terminan yendo con el tipo de imagen para SQL Server CE. (Causa varbinary (8000) no era lo suficientemente grande.) – Vaccano

+0

Oh, gracias, yo no sé nada de eso en realidad) – n535

Cuestiones relacionadas