Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
In der Bestellverwaltung haben wir bisher nur mit einfachen Daten in Datentypen wie Text, Zahl oder Datum gearbeitet. Dabei kann man doch mit WPF auch wunderbar Bilddateien anzeigen. In diesem Artikel erweitern wir die Datenbank Bestellverwaltung um das Speichern und die Anzeige von Bildern zu den Produktdatensätzen.
Speicherort: Tabellenfeld oder Dateisystem
Eine der wichtigsten Fragen, wenn es darum geht, Bilder mit einer Datenbank zu verwalten, ist die nach dem Speicherort der Bilder. Grundsätzlich gibt es zwei einfache Varianten: Die Bilder werden im Dateisystem gespeichert und die Datenbank hält nur die Dateipfade zu den Bildern in den jeweiligen Datensätzen vor. Oder Sie speichern die Bilder direkt in einem entsprechenden Feld in der Datenbank. Wir werden an dieser Stelle, an der wir mit einer SQLite-Datenbank arbeiten, die Variante mit dem Dateisystem wählen, und zwar aus folgenden Gründen:
- Datenbanken sind dazu gemacht, referenziell verknüpfte Daten zu speichern, diese zu indizieren und schnell zugreifbar zu machen oder zu ändern. Das Speichern von Bildern oder anderen Dateien in den Tabellen der Datenbank ist da eher kontraproduktiv.
- Wenn Sie die Bilder in der Datenbankdatei speichern und die Daten sichern wollen, müssen Sie immer die komplette Datenbank inklusive der enthaltenen Bilder sichern. Wenn sich die Bilder im Dateisystem etwa in einem Ordner im gleichen Verzeichnis wie die Datenbank befinden, können diese separat gesichert werden, was nur dann nötig ist, wenn sich diese geändert haben.
- Zum Bearbeiten oder Anzeigen müssen die Bilder in der Regel entweder ohnehin im Dateisystem gespeichert oder aber anderweitig in den Speicher geladen werden. Dann kann man sie auch direkt aus dem Dateisytem heraus öffnen.
Optimalerweise speichern wir die Bilder auch noch in einem Verzeichnis, dass sich auf der gleichen Ebene oder unterhalb der Anwendung befindet. Auf diese Weise brauchen wir nur den relativen Pfad zur Bilddatei in der Datenbank zu speichern.
Tabelle Produkte erweitern
Damit wir die Bilder, die wir im Dateisystem speichern, mit den Datensätzen der Tabelle Produkte verknüpfen können, fügen wir dieser Tabelle ein Feld namens Bild hinzu. Es soll ein einfaches Textfeld sein, dass den Pfad zur Bilddatei speichert, und zwar relativ zur Datenbank in einem eigenen Ordner namens Bilder.
Diese Änderung nehmen wir der Einfachheit halber über das Tool SQLiteStudio vor. Dort öffnen Sie die Datenbank Bestellverwaltung und klicken dann doppelt auf die Tabelle Produkte. Nun betätigen Sie die Schaltfläche Add column (Ins) wie in Bild 1.
Bild 1: Anlegen eines neuen Feldes
Dies öffnet den Dialog aus Bild 2. Hier tragen Sie den Namen des neuen Feldes sowie den Datentyp ein. Anschließend schließen Sie den Dialog mit der OK-Schaltfläche.
Bild 2: Anlegen des Feldes Bild
Erst der Klick auf die Schaltfläche Commit structure changes öffnet den Dialog Auszuführende Abfragen, der die SQL-Abfragen mit den geplanten Änderungen anzeigt und per Klick auf OK die Änderung in die Datenbank überträgt (siehe Bild 3).
Bild 3: SQL-Anweisung zum Anlegen der Tabelle mit dem Feld Bild
Nun müssen wir die Änderung in der Datenbank noch in das Entity Data Model übertragen. Dazu öffnen Sie die Ansicht Bestellverwaltung.edmx und wählen aus dem Kontextmenü den Eintrag Modell aus der Datenbank aktualisieren… aus (siehe Bild 4).