HelpersSmallEd - Save ohne Form

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    HelpersSmallEd - Save ohne Form

    Hallo,

    in einer Projektmappe wird das Projekt HelpersSmallEd vom ErfinderDesRades eingesetzt, um DataSet-Inhalte in XML-Dateien seichern und wieder einlesen zu können.

    Bislang wurde ein DataSet stets in Verbindung einer Form eingesetzt.

    Mit dem Befehl ...

    Visual Basic-Quellcode

    1. dataset.save(Form)


    ... werden die Inhalte eines Datasets in einem Form-Objekt gespeichert.

    Dieser Save-Befehl wird für ein DataSet gesucht, welches nicht an einer Form gebunden ist.

    Hintergrund: In einem Vorgang werden die vorhandenen XML-Einträge in ene DataSet eingelesen, verarbeitet und anschließend gleich wieder weggeschrieben.

    Wenn ich es richtig in Erinnerung habe, existiert zu dem Projekt "HelpersSmallEd" auch ein Sammelthread, in dem sehr viele Fragen bereits geklärt sind. Falls jemand die URL hat, kann er diese mir hier mitteilen.

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

    Hallo,

    wenn ein DataSet direkt mit dem Befehl

    VB.NET-Quellcode

    1. Dim streamWrite As New System.IO.FileStream(FileNameXML, System.IO.FileMode.Create)
    2. dataset.writexml(streamWrite)


    gespeichert werden soll, tritt beim dataset.writexml-Befehl ein Laufzeitfehler mit Verweis auf eine nicht vorhandene "IXmlSerializable-Schnittstelle" auf.

    Vollständige Fehlermeldung: Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in System.Data.dll aufgetreten.
    Der Typ 'System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' implementiert nicht die IXmlSerializable-Schnittstelle, weshalb die Serialisierung nicht fortgesetzt werden kann.

    Bei einem anderen Testlauf wurde beim dataset.writexml-Befehl bemängelt, dass kein Startobjekt vorhanden sei.

    @ErfinderDesRades Gibt es noch den Sammelthread zum "HelpersSmallEd"?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BigBen2003“ ()

    @MichaHo: Ja, dabei wird ein Laufzeitfehler erzeugt:
    System.InvalidOperationException: "Der Typ 'System.ArgumentException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' implementiert nicht die IXmlSerializable-Schnittstelle, weshalb die Serialisierung nicht fortgesetzt werden kann."

    Im Anhang ist ein kleines Demo.

    DemoXMLDatei.zip

    Im Modul ModulEventLogging.vb muss nur die Sub WriteMessage mit dem Pfad zur XML-Datei aufgerufen werden.

    Vielleicht findet ja jemand den Fehler, der mir da unterlaufen ist?

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

    Mach mal bitte Option Strict On.
    Das wird also sowas wie ein CrashReporter, bei dem die auftretenden Exceptions in ner Datei abgespeichert werden sollen?
    Der Grund steht ja in der Exception schon drin: Eine ArgumentException kann nicht serialisiert werden. Das heißt, dass Mikrosaft es wohl nicht für sinnvoll erachtet hat, dass die ganzen Daten einer einfachen Exception (von komplexen Exceptions ganz zu schweigen) in einer Datei abgespeichert werden können. Ich stell mir erstmal die Frage, wozu Du da ein tDS brauchst? Willst Du die Daten irgendwann wieder laden? Da die Dateidaten ja bei jedem Programmstart + Exception überschrieben werden. Aber wurscht, ist ggf. alles erst im Entstehen.
    Eine Möglichkeit wäre, einzelne Teile der Ex explizit abzuspeichern (ex.Message, ex.InnerException, ...). Ggf. könnte man mit Reflection noch effizienter mit weniger Zeilen mehr rausholen. Aber eine ganze Exception wird nicht gehen, da tw. sehr komplexe Objekte in solch einer Ex enthalten sein können. Und die zu serialisieren/in Dateiformat abzuspeichern ... Ich glaube nicht*, dass das möglich ist.

    *Aussageb beruht auf fehlendem besseren Wissen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @MichaHo Warum nicht so:

    VB.NET-Quellcode

    1. FileInfo file = new FileInfo(„PfadZuDeinerXML\DeinFileName.xml“)
    2. If(file.Exits)
    3. {
    4. DeinDataSet.WriteXml(file)
    5. }

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nö, mehr hatte ich auch nicht. Hab n neues Console-Projekt erstellt und mir den VB-Code reinkopiert und das tDS dem Projekt hinzugefügt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.