AW: Lokale Datenbank Updaten
Diese Frage hab ich mir so ähnlich auch schonma gestellt, da ich geplant hatte, meine Apps mit ner SQLite DB auszustatten.
Ich wäre allerdings auch nicht wirklich anders vorgegangen als die DB neu zu erstellen oder so.
Alternativ wäre ja möglich, ne Version in der DB zu hinterlegen und dann abzufragen und sollte sie niedriger sein als die aktuelle, einfach ne .sql auszuführen oder so, die dann alles updated.
Andere Möglichkeit wäre halt einfach das Profil bzw die DB zu laden, die neuen Dinge mit Standardwerten zu versehen und beim speichern dann ins neue Format zu überführen.
Aber das sind alles Dinge, die aus selbe hinauslaufen, daher schließe ich mich mal an, denn ich würde vll auch gerne ma wissen, wie man das am besten machen sollte/könnte
AW: Lokale Datenbank Updaten
Also wäre die Frage ob es diese Möglichkeit auf der Lokalen Datenbank gibt. Oder besser gesagt wie man diese Möglichkeit genau nutz.
Werde heute Abend mal schauen ob ich etwas dazu finde, wenn mir niemand zuvor kommt.
AW: Lokale Datenbank Updaten
Also ich würde dann ganz einfach hingehen und mir ne Art Version in der DB speichern und diese auslesen und vergleichen.
Wenn die DB dann älter ist, als die App erwartet, würde ich die DB dann updaten (kann man ja zB im Ladescreen direkt nach start der App machen) oder einfach halt mit der alten Version weiterarbeiten und dann beim Save ins neue Format überführen.
AW: Lokale Datenbank Updaten
Also einfach damit weiterarbeiten wird wohl nicht möglich sein. Oder zumindest in meinem Falle. Ich lese die Daten in Observable Collections aus und arbeite mit diesen. Und wenn die Tabelle nicht mit dem Schema übereinstimmt dann stürzt das Programm ab wenn es die Daten in die Collection laden will. Vermutlich weil die beiden Schemas nicht übereinstimmen.
Anhand einer Versionsnummer validieren ob die entsprechenden Tabellen auf dem aktuellsten Stand sind, bietet sich insofern sehr an. Die Frage ist jetzt nur wie man eine entsprechende Tabelle aktualisieren kann. Dafür habe ich bisher noch keine Möglichkeit gefunden, abgesehen von die Tabelle neu erstellen ( was wir ja schon weiter oben mehr oderweniger abhacken wollten ).
AW: Lokale Datenbank Updaten
ZUm Daten auslesen sagte ich ja, dass man da das neue halt erstma mit Standardwerten füllen müsste und dann beim Speichern eben ins neue Format überführen.
Auf jeden Fall aber würde ich hingehen und evtl dem Benutzer mitteilen, dass das Ding konvertiert bzw upgraded werden muss, so dass es eben nich zu Überraschungen kommt.
Irgendwie wirds ja immerhin gehen^^
Ansonsten, nutz doch SQLite, da haste auf jeden Fall Möglichkeiten, Tabellen zu upgraden soweit ich informiert bin.
Notfalls lieferste (falls möglich) mit der App quasi ne Standard-DB mit (die neuste) und validierst die vorhandene DB.
Sollte die vorhandene DB älter sein, so lieste die Daten aus, löscht die alte DB (bzw kopierst die als Backup iwo hin, sicher is sicher) und fügst an den Platz deine neue DB ein, danach setzte die Daten wieder in die DB ein und fährst danach mit dem normalen Programmablauf fort (somit ist das ne Variante, die zum Appstart geschehen muss, da aber am besten den Benutzer benachrichtigen und auch ne Möglichkeit evtl anbieten, das Backup wiederherzustellen, falls mal was schiefging)
Andernfalls, falls möglich, einfach benachrichtigen, dass ein Update der DB anstehen würde und dem Benutzer die Entscheidung zu lassen, wann er upgraded (er kann halt nicht alles neue nutzen, aber diese version wäre auch Benutzerfreundlicher, da nicht immer jeder gleich updaten will)
AW: Lokale Datenbank Updaten
Das Problem sind nicht leere Werte, sondern wenn andere (zum Beispiel weniger) Werte kommen. Ausser man man macht verschiedene Observable Collections, was ich etwas umständliche fände.
SQLite kann man soweit ich weiss nicht nutzen. Nur schonmal weil diese kein Linq to SQL unterstützen.
Das Ausliefern einer Standartdatenbank wäre wohl nur per Download möglich. Sprich wenn man die von einem Server herunterlädt, was aber eher ungünstig ist für ein Offline Programm.
Habe bisher leider noch nichts entdeckt wie ich das mit C# respektive Silverlight oder Linq to SQL lösen kann.
AW: Lokale Datenbank Updaten
Also für SQLite gibt es afaik auch ne LINQ Unterstützung, bin mir aber nich sicher.
Ansonsten gibts für SQLite auch komfortable Möglichkeiten, musst halt dann normales SQL benutzen, was aber auch nicht schlimm wäre.
Jedenfalls, ausliefern einer StandardDB wäre möglich, indem du die DB einfach schon gleich ins .xap einbaust, zB in ner .resx
Aber das ist Sache, die im Auge des Betrachters liegt.
Jedenfalls wären die Schritte zum Updaten in etwa so:
1. DB-Version prüfen
2. Wenn Update nötig, dann:
2.1 Entweder auslesen und weiterarbeiten (fehlende bzw ungültige Werte durch den Standard ersetzen, der gebraucht wird)
2.2 Direkt updaten (da muss auch halt eben auf fehlende Werte geprüft werden)
2.3 DB austauschen (mit Backup) und die vorhandenen Daten dann einspielen (auch wieder fehlende Werte durch Standard ersetzen oder so)
3. DB sollte hier dann fertig sein
Alternativ müssteste auf XML-Dateien ausweichen, die lassen sich glaube ich leichter updaten, sind aber auch bissl unflexibel (Pro Datensatz zB eine Datei oder so wäre irgendwann zu viel)
AW: Lokale Datenbank Updaten
Datasets werden von WP7 nicht unterstützt. Insofern dürfte auch die Unterstützung von anderen Datenbanken ins Wasser fallen.
Über die Schritte sind wir uns einig. Das eigentliche Problem ist jetzt ob man konkret ob man eine Tabelle über den C# Code update kann (was eigentlich die schöne Variante wäre IMHO) oder ob man das mit total austausch machen muss.
Die IsolatedStorageSettings wären noch eine einfach updatebare Variante, jedoch bin ich erst gerade von diesen auf die Datenbank umgestiegen, insofern möchte ich nicht unbedingt gleich wieder zurück wenn es sich vermeiden lässt ^^
AW: Lokale Datenbank Updaten
Also für SQLite gibts keine offizielle Lösung aber Lösungen von anderen Entwicklern, die das halt eben machen.
Offiziell unterstützt WP7 ja nur eine MS SQL DB
Wenn du SQLite über eine der angebotenen Lösungen nutzen würdest, könntest du afaik auf jeden Fall im Code dein Zeug updaten, da SQL ja auch Update Anweisungen beinhaltet (bin nich genau sicher, ob UPDATE auch in SQLite so implementiert is, wie zB bei MySQL)
Ein Totalaustausch wäre aber effektiv evtl auch ne Möglichkeit.
Es bleiben dir ja immernoch XML Dateien und so, die kann man ja gut austauschen, aber da wirds mitunter wohl später zu umständlich und so