6

Kennt jemand ein Beispiel zum Speichern eines Abbilds in einer SQL Server CE-Datenbank?Speichern eines Abbilds in einer SQL Server CE-Datenbank

Welcher Datentyp sollte die Spalte sein? (Ich rate binär.)

Ich benutze Linq-To-Datasets. Ist es möglich, das Image in die Datenbank zu legen und später wieder herauszuziehen?

Vielen Dank für jeden Hinweis.


Hier ist, wie ich es tat:

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

es zu laden wieder heraus habe ich dies:

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

ich eine Seite auf MSDN gesagt, dass, dass die Bildsäule Der Typ wird entfernt und Sie sollten varbinary (MAX) verwenden. Max wird nicht auf SQL Server CE unterstützt, also habe ich Varbinary (8000).

SPÄTER NOTE: während varbinary (max) auf SQL Server CE nicht unterstützt wird. Varbinary (8000) ist nicht groß genug für viele Bilder. Ich habe am Ende den Image-Typ verwendet, obwohl es geplant ist, veraltet zu sein. Sobald MS eine vernünftige Alternative auf der mobilen Plattform anbietet, werde ich das Umschalten in Erwägung ziehen.

Antwort

5

Hier ist ein MSDN-Artikel erklärt, wie:

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

Leider ist das Beispiel in VB ist, aber ich bin sicher, dass Sie die Vorstellung davon, wie es zu tun bekommen.

Ich würde sagen, der binäre Datentyp wäre gut zum Speichern der Bilder.

1

Dies ist keine direkte Antwort auf Ihre Frage, aber ich hatte Erfolg beim Speichern des Dateipfads des Bildes (Beispiel: C: \ images \ image1.png) als Zeichenfolgenwert in der Datenbank anstelle des rohen Bildes.

Ein Vorteil besteht darin, dass es die Datenbankgröße kleiner hält.

Eine andere Möglichkeit besteht darin, dass mehrere Tabellen auf die Bilder zeigen können, ohne mehrere Kopien des Bildes zu speichern.

+0

vernünftige Idee, wenn ich Referenzdaten speichern würde. Dies ist jedoch für Screenshots des aktuellen Fensters. Ich brauche sie in der Datenbank, um sie zu organisieren. – Vaccano

+0

+1: Ich mag es nicht wirklich, dies zu tun und das größte Problem (die mehreren Kopien des Bildes) ** kann einfach gelöst werden ** durch Erstellen einer Tabelle Bilder mit einer ID und dem Bild. ** Obwohl mit der zukünftigen Abwertung des Image-Typs und den Einschränkungen der varbinären Größe, denke ich, ist es tatsächlich die beste Option **. Wie traurig MS .. – Diego

+0

Etwas, das ich in einer meiner Anwendungen herausgefunden habe, um die Duplizierung des gleichen Bildes zu stoppen, besteht darin, Bildinformationen in einer separaten Tabelle zu haben und dann alles auf diese eine Tabelle zu beziehen.Ich habe den Hash des Bildes, den binären Inhalt und eine ID, um damit zu gehen. Sobald das Bild in der Datenbank ist, füge ich dem Bild einfach einen anderen Verweis hinzu, anstatt den binären Inhalt zu duplizieren. – JLopez

5

Warum verwenden Sie den Image-Typ nicht? Here ist eine Beschreibung der Typen, die vom SQL-Server ce unterstützt werden.

Bild - Variable-Länge von Binärdaten mit einer maximalen Länge von 2^30-1 (1,073,741,823) Byte.

+5

Weil sie veraltet sind. Die Hilfeseite sagt: ** Text-, Text- und Bilddatentypen werden in einer zukünftigen Version von Microsoft SQL Server entfernt. Vermeiden Sie die Verwendung dieser Datentypen in neuen Entwicklungsarbeiten, und planen Sie, Anwendungen zu ändern, die sie derzeit verwenden. Verwenden Sie stattdessen nvarchar (max), varchar (max) und varbinary (max). ** (Aus: http://msdn.microsoft.com/en-us/library/ms187993.aspx) – Vaccano

+1

Obwohl ich es tat enden mit dem Image-Typ für SQL Server CE. (Ursache varbinary (8000) war nicht groß genug.) – Vaccano

+0

Oh, danke, das wusste ich nicht wirklich) – n535