Datenbank oder DataSet für mein konkretes Programm

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    Datenbank oder DataSet für mein konkretes Programm

    Hallo ihr lieben
    Das Thema wurde hier ja schon x dutzend male durchgekaut, aber ich bin mir für mein aktuelle Projekt ziemlich unsicher, ob ich DataSet oder Datenbank verwenden soll.
    Ich habe ein funktionierendes Programm, mit dem ich ziemlich alles in meiner Firma mache (Daten speichern = Adressen, Bestellungen, sämtliche Artikel, todo, etc.) außerdem tätige (und speichere) ich hiermit Betellungen und sämtliche Tageseinnahmen seid Eröffnung.
    Bisher funktioniert hier ein DataSet prima. Die dazugehörige xml hat eine Größe von ca. 14 MB.
    Zusätzlich zu diesem "Hauptprogramm", welches aktuell auf einem PC läuft, gibt es noch ein "Begleitprogramm" für die Angestellten.
    Dieses speichert an sich keine Daten, es kann nur aus der xml lesen und erzeugt dann z.B. Wareneingangsrechnungen (bzw. eher Quittungen) und liefert einen Überblick über Preise und Kundenbestellungen.
    Damit diese Daten aktuell sind, gibt es im Hauptprogramm eine Sub, die die benötigten Daten zusammenträgt und in eine xml auf dem NAS ablegt.
    Mein NAS ist jedoch "nur" eine FritzBox - der Zugriff, also das starten des Begleitprogrammes dauert ein wenig (aber zumutbar).
    Prinzipiell bin ich mit dieser Situation auch nicht unzufrieden - lediglich den Button zum bereitstellen der Daten, würde ich durch eine Sub die automatisch beim beenden des Programmes läuft ersetzen.

    Da dies eins der Programme war, mit dem ich mir (mit eurer Hilfe hier) vb.Net beigebracht habe, ist die Qualität des Codes nicht besonders gut.
    Das fällt mir beim Erweitern der Funktionalität immer mehr auf die Füße. Deswegen habe ich dieses Programm komplett neu gestaltet.
    Aktuell wieder mit DataSet. Die Neugestaltung ist ziemlich fertig. Es fehlt nur noch nUpdate und die Verschlüsselung des DataSets, sowie das Begleitprogramm (wobei ich hier eigentlich nur UserControls des Hauptpgrogrammes verwende).

    Nun stehe ich vor der Frage, bleibe ich bei DataSet, oder wechsel ich zu einer Datenbank?
    Folgendes muss gegeben sein.
    Das Hauptprogramm auf meinem PC muss immer lauffähig sein, ohne dass ich Internet, oder eine VPN Verbindung zur Firma benötige.
    Entsprechend muss das Begleitprogramm immer lauffähig sein, auch wenn sich mein PC nicht in der Firma befindet.
    Macht es unter diesen Vorraussetzungen überhaupt Sinn, über eine Datenbank nachzudenken? Hätte ich hierdurch einen Vorteil? Oder kann ich Getrost beim DataSet bleiben (wo liegen hier die Limitierungen in Punkto Datenmenge)?
    Gibt es die Möglichkeit eine solche Datenbank lokal UND auf dem NAS abzulegen, sodass ich immer eine lokale Kopie habe und hier ggf. Änderungen vornehmen kann, die bei erneuter Verbindung zum NAS übertragen werden?

    In meiner Traumwelt, wird das Begleitprogramm auf 2 PCs ausgeführt (und speichert keine Daten in die Datenbank), und auch das Hauptprogramm läuft auf zwei PCs, die vollkommen unabhängig von Internet und Standort Daten ändern können. Aber ich glaube, das wird wohl ein Traum bleiben?

    Edit: und noch eine Frage. Kann ich anfangen mein neues Programm mit DataSet zu benutzen. Oder könnte es Probleme mit den gespeicherten Daten geben, falls ich mich für eine Datenbank entscheide?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hast du eigentlich auch eine Datensicherung?
    Ob Datenbank oder Xml-Datei: Sowas kann kaputtgehen, und dann gehts der Firma auch nicht mehr gut.
    Und die Wiederherstellungsfunktion der Datensicherung auch gründlich! ausprobieren - in nicht soo seltenen Fällen hakelt das nämlich, oder funzt auch garnet.

    Unerfreulich die geforderte Programm-Lauffähigkeit trotz Abkopplung der eigentlichen Datenbasis.
    Das erfordert eine optional lokale Datenbasis (Db oder Dataset), und dann braucht man ein Konzept, wann und wie dieselbe mit der zentralen Datenbasis synchronisiert wird.
    Mit Dataset habich sowas schon programmieret, bei manchen Datenbanken gibts da glaub Funktionalität für - muss man gucken, ob vorhanden, und geeignet.

    DerSmurf schrieb:

    In meiner Traumwelt, wird das Begleitprogramm auf 2 PCs ausgeführt (und speichert keine Daten in die Datenbank), und auch das Hauptprogramm läuft auf zwei PCs, die vollkommen unabhängig von Internet und Standort Daten ändern können. Aber ich glaube, das wird wohl ein Traum bleiben?
    DbConcurrency also.
    Mit manchen Änderungen ist sowas möglich, in anderen Szenarien wirds schwierig, in noch anderen unmöglich.
    Die Lösungen können verhältnismässig einfach sein, aber User-unfreundlich oder aufwändig mit mehr User-Komfort.
    An eine Db angeschlossen ist mehr möglich, aber dieser Vorteil ist natürlich dahin, wenns um eine optional lokale Db geht.

    DerSmurf schrieb:

    Kann ich anfangen mein neues Programm mit DataSet zu benutzen. Oder könnte es Probleme mit den gespeicherten Daten geben, falls ich mich für eine Datenbank entscheide
    Kannst damit anfangen.
    Das MIgrieren Dataset->DB ist grundsätzlich sogar recht einfach, aber u.U. TeufelDetail, zB @tragl hatte gelegentlich Ärger mit speziellen Db-Datentypen, Date, bit, binary - oder war das .Net-Timespan? weissichnimmer.
    Hmm, also den Teil hab ich problemlos verstanden :o)

    ErfinderDesRades schrieb:

    Hast du eigentlich auch eine Datensicherung?

    Ja, die habe ich. Mein Programm hat eine Backup Funktion, welche die xml, sowie allerhand Dateien (Rechnungen, Lieferscheine, etc) in eine zip packt.
    Das ganze nervt mich jeden Tag, bis ich auf "ja dann mach dein doofes Backup" klicke und tut dann seine Arbeit im Hintergrund.

    Hast du zu dem Rest einen Link oder sowas? Denn ich lese raus, das prinzipiell alles möglich ist, es aber Abhängig davon ist, wie viel Aufwand ich betreiben kann / möchte.
    Jedoch kann ich 0 abschätzen, was an Arbeit, wann auf mich zukommt.
    Und mich würde deine persönliche Meinung interessieren. Was würdest du an meiner Stelle (mit meinen Anforderungen) für eine Art der Datenspeicherung verwenden.

    Edit: Mir fällt gerade ein, dass ich im alten Programm viele Daten in andere xmls ausgelagert hatte.
    So hatte ich z.B. für jede Firma eine eigene .xml zum speichern der Bestellungen. Es gab ein eigenes Programm um Schilder (fürs Regal vor die Ware) zu erstellen, ebenfalls mit eigener xml.
    Das alles befindet sich jetzt innerhalb des Hauptprogeammes und eben in einer xml.
    Die angegeben ca. 14MB xml Größe, muss ich also auf ca. 25MB erhöhen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „DerSmurf“ ()

    DerSmurf schrieb:

    Das ganze nervt mich jeden Tag, bis ich auf "ja dann mach dein doofes Backup" klicke und tut dann seine Arbeit im Hintergrund.
    Fein - und nun ausprobieren, ob die Wiederherstellung auch immer noch geht.
    Das haste vlt. vor einem Jahr programmiert, und inzwischen mögen sich Datenstrukturen und Code geändert haben, oder mw. ein passwort, oder ein verschlüsselungsTyp....

    DerSmurf schrieb:

    Hast du zu dem Rest einen Link oder sowas? Denn ich lese raus, das prinzipiell alles möglich ist, es aber Abhängig davon ist, wie viel Aufwand ich betreiben kann / möchte.
    Jedoch kann ich 0 abschätzen, was an Arbeit, wann auf mich zukommt.
    DbConcurrency ist ein Stichwort - google wird dich damit totschmeissen, und nix konkret verwertbares dabei.
    Dann kannste hier im Forum nach 'BearbeitungsModus' suchen, weil das habich glaub zig mal erklärt, dass man dafür in einen BearbeitungsModuss gehen muss, bei dem bestimmte Datensätze für andere Nutzer gesperrt sind.
    Ein Link würde vorraussetzen, es sei eine Standard-Lösung möglich, aber ist ja grad nicht.

    DerSmurf schrieb:

    Und mich würde deine persönliche Meinung interessieren. Was würdest du an meiner Stelle (mit meinen Anforderungen) für eine Art der Datenspeicherung verwenden.
    Ich würde DatasetOnly bleiben.
    Und wie gesagt: Meine Priorität wäre erstmal, die Backup-Wiederherstellung nochmal gründlich zu testen.
    Es gibt meiner Meinung nach nicht nur technische Aspekte, die hier sehr gut erklärt wurden, sondern auch rechtliche.

    Wenn Daten in einer XML-Datei gespeichert werden, sind sie recht leicht manipulierbar. Da hier Kundenadressen gespeichert und diese vor unberechtigtem Zugriff geschützt werden müssen (Datenschutz-Grundverordnung), verbietet sich eigentlich eine XML-Datei.

    Außerdem könnten sogar Rechnungsdaten recht einfach manipuliert werden.

    Datenzugriffsmethoden und deren Schutz müssen in einer Verfahrensdokumentation beschrieben werden, die jeder Betrieb erstellen muss. Diese wird schon mal bei einer Prüfung durchs Finanzamt eingefordert. Da könnte das Benutzen von XML-Dateien zu unangenehmen Diskussionen führen.

    Mein Beitrag ist vielleicht off topic (hat nix mit VB zu tun), sollte aber trotzdem bedacht werden.
    @SchorschCode Danke für deinen Einwand.
    Ist ja bei meinem Verwendungszweck alles andere als Offtopic.
    Ich bilde mir aber ein, die xml relativ gut verschlüsselt zu haben. (bzw. für meine Zwecke ausreichend).
    Ich nutze die VB Crypto Geschichte mit Salt und einem User generierten Password (welches natürlich nicht im Programm gespeichert wird).

    Das habe ich sogar in meiner Verfahrensdokumentation beschrieben.