6

Qualcuno sa di un esempio su come memorizzare un'immagine in un database di SQL Server CE?Archiviare un'immagine in un database di SQL Server CE

Quale tipo di dati deve essere la colonna? (Sto indovinando il binario.)

Uso i set di dati Linq-To-Dataset. È possibile usarlo per inserire l'immagine nel database ed estrarla di nuovo più tardi?

Grazie per qualsiasi consiglio.


Ecco come ho fatto:

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

Per caricare di nuovo fuori ancora una volta ho fatto questo:

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

ho trovato una pagina su MSDN che ha detto che la colonna Immagine il tipo sta andando via e si dovrebbe usare varbinary (MAX). Max non è supportato su SQL Server CE, quindi ho eseguito varbinary (8000).

LATER NOTA: anche se varbinary (max) non è supportato su SQL Server CE. Varbinary (8000) non è abbastanza grande per molte immagini. Ho finito per utilizzare il tipo di immagine anche se si prevede di essere deprecato. Una volta che ms offre un'alternativa resonable sulla piattaforma mobile, prenderò in considerazione il passaggio.

risposta

5

Ecco un articolo di MSDN spiega come:

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

Purtroppo, l'esempio è in VB, ma sono sicuro che si può ottenere l'idea di come farlo.

Direi che il tipo di dati binario andrebbe bene per la memorizzazione delle immagini.

1

Questa non è una risposta diretta alla tua domanda, ma ho avuto un buon successo archiviando il filepath dell'immagine (esempio: C: \ images \ image1.png) come valore di stringa nel database invece dell'immagine grezza.

Un vantaggio è che mantiene le dimensioni del database più piccole.

Un altro è che più tabelle possono puntare alle immagini senza memorizzare più copie dell'immagine.

+0

idea ragionevole se stavo memorizzando i dati di riferimento. Tuttavia, questo è per le schermate della finestra corrente. Ho bisogno di loro nel database per tenerli organizzati. – Vaccano

+0

+1: Non mi piace molto farlo e il problema più grande (le copie multiple dell'immagine) ** può essere risolto semplicemente ** creando una tabella Immagini con un ID e l'immagine. ** Anche se con la futura deprecazione del tipo di immagine e le limitazioni sulla dimensione varbinary penso che sia in realtà l'opzione migliore **. Che tristezza MS .. – Diego

+0

Qualcosa che ho scoperto in una delle mie applicazioni per fermare la duplicazione della stessa immagine è avere informazioni sull'immagine su una tabella separata e quindi riferire tutto a quella tabella.Ho l'hash dell'immagine, il contenuto binario e un ID per seguirlo. Una volta che l'immagine è nel database, invece di duplicare il contenuto binario, aggiungo semplicemente un altro riferimento a quell'immagine. – JLopez

5

Perché non stai utilizzando il tipo di immagine? Here è una descrizione dei tipi, supportata da sql server ce.

Immagine - lunghezza variabile dati binari con una lunghezza massima di 2^30 - 1 (1,073,741,823) byte.

+5

Perché sono deprecati. La pagina della guida dice: ** i tipi di dati ntext, text e image verranno rimossi in una versione futura di Microsoft SQL Server. Evitare l'uso di questi tipi di dati in un nuovo lavoro di sviluppo e pianificare di modificare le applicazioni che attualmente li utilizzano. Utilizzare invece nvarchar (max), varchar (max) e varbinary (max). ** (Tratto da: http://msdn.microsoft.com/en-us/library/ms187993.aspx) – Vaccano

+1

Anche se l'ho fatto finire con il tipo di immagine per SQL Server CE. (Perché varbinary (8000) non era abbastanza grande.) – Vaccano

+0

Oh, grazie, non lo sapevo davvero) – n535

Problemi correlati