none
XML aus Image RRS feed

  • Frage

  • Hallo,

    ich bin neu hier im Forum, arbeite mit SQL Server2008R2 und brauche Hilfe bei einer Abfrage einer Datenbank. Hier gibt es eine Tabelle mit Primary Key und einem Image (Beispiel hänge ich mit an). Dieses Image ist in XML verschlüsselt. Darin sind mehrere Daten enthalten wie LastName, Birthday... Leider weis ich nicht wie ich das Image entpacke, so dass ich gezielt auf die einzelnen Felder zugreifen kann. Wenn ich versuche, die Abfrage mit convert oder cast zu dekodieren, kommen immer verschiedene Fehlermeldungen wie falsches XML Zeichen oder allgemeinere Fehler. Ich muss dazu sagen, dass ich mich mit SQL zwar auskenne aber eben nicht mit XML und Nodes.... Vielleicht gibt es ja eine einfache Lösung. Über jede Hilfe bin ich dankbar. Hier das Beispiel:

    <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

      <xsd:schema targetNamespace="urn:schemas-microsoft-com:sql:SqlRowSet4" xmlns:schema="urn:schemas-microsoft-com:sql:SqlRowSet4" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sqltypes="http://schemas.microsoft.com/sqlserver/2004/sqltypes" elementFormDefault="qualified">

        <xsd:import namespace="http://schemas.microsoft.com/sqlserver/2004/sqltypes" schemaLocation="http://schemas.microsoft.com/sqlserver/2004/sqltypes/sqltypes.xsd" />

        <xsd:element name="PatientData">

          <xsd:complexType>

            <xsd:sequence>

              <xsd:element name="id" type="sqltypes:uniqueidentifier" nillable="1" />

              <xsd:element name="data" type="sqltypes:image" nillable="1" />

              <xsd:element name="ItemCount" type="sqltypes:int" nillable="1" />

              <xsd:element name="IsTrainingSet" type="sqltypes:bit" nillable="1" />

              <xsd:element name="ItemHash" type="sqltypes:int" nillable="1" />

            </xsd:sequence>

          </xsd:complexType>

        </xsd:element>

      </xsd:schema>

      <PatientData xmlns="urn:schemas-microsoft-com:sql:SqlRowSet4">

        <id>EBBB92D9-0DE0-4403-AB6D-0143FFC9AC0D</id>

        <data>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</data>

        <ItemCount>9</ItemCount>

        <IsTrainingSet>0</IsTrainingSet>

        <ItemHash>-1641947381</ItemHash>

      </PatientData>

    Tabelle ist so aufgebaut und heißt PatientData:

    id(PS, uniqueidentifier, not null)

    data(Image, null)

    ItemCount(int,null)

    IsTrainingSet(bit,null)

    ItemHash(int,null)

    Gruß Wolfgang

    Freitag, 17. März 2017 08:19

Antworten

  • Hallo Wolfgang,

    wenn in der "data" Spalte deiner Tabelle ein Base64 codierter String steht, kannst Du das nicht mittels SQL als XML verarbeiten. Die Anwendung müsste den Inhalt lesen, Base64 Decode drüberlaufen lassen und dann als XML parsen.

    Es wäre daher wohl sinnvoller, den XML Inhalt in eine XML Spalte zu packen und nicht in eine image Spalte (wobei ich mich eh frage, warum man das macht und nicht [n]varchar( MAX ), wenn eh kein binärer Inhalt vorkommt.

    Ein kurzer Test zeigt allerdings, dass das, was in data steht, kein Base64 ist. Zumindest lässt es sich nicht decodieren. Ist das evtl. zusätzlich noch verschlüsselt?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. März 2017 12:08
    Moderator
  • Hallo Wolfgang,

    wie gesagt, den String, den Du gepostet hast, konnte ich nicht mit Base64 Decode in eine lesbare Form bringen.

    Daher wirst Du nicht umhin kommen, denjenigen, der die Daten dort ablegt zu fragen, in welchem Format das passiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. März 2017 13:48
    Moderator

Alle Antworten

  • Hallo Wolfgang,

    ich muss gestehen, dass ich nicht verstanden habe, was Du da wo und wie machst.

    Der XML Aufbau, den Du zeigst, wird wo gespeichert?

    Wie wird das gelesen?

    Was steht in "data"? (Für mich sieht das aus wie ein Base64 codierter Inhalt)

    Wie greifst Du per SQL auf welche Daten zu und welche Fehlermeldung erhältst Du?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. März 2017 10:34
    Moderator
  • Hallo Stefan,

    im Prinzip greift eine spezielle Software auf den SQL Server 2008R2 zu. Die Daten sind in 5 Tabellen gespeichert (Base64 codierter Inhalt ist richtig). NUn soll ich eine Abfrage schreiben um genau auf diesen Inhalt, der z.B. in der Tabelle PatientData Spalte data vorhanden ist. In dieser Spalte data (image) verbergen sich die Spalten PatientId, ImportID, FirstName, MiddleName, LastName, PatientKey, Birthday, Gender,Anonymizer und Comment. Jetzt versuche ich diese XML Daten zu extrahieren, was mir aber nicht gelingen will. Ich denke dass die XML Daten (Base64) per Nodes als image gespeichert wurden. Ich weiß was rauskommen mus, aber nicht wie ich anstellen soll, diese wieder zu extrahieren. Dazu kenne ich mich zu wenig mit der XML Hierarchie in SQL Server aus.

    Hintergrund ist, dass die Software nur über einen sehr komplizierten Weg diese Daten in eine ACCESS Datenbank konvertiert. Dazu muss jedesmal erst der Weg über XML und dann in Access konvertiert werden. Daher die Anfrage dies direkt über den SQL Server zu bewerkstelligen. Ich habe das entpackte XML File aber nicht wie man das entschlüsseln kann.

    Gruß Wolfgang

    Freitag, 17. März 2017 11:52
  • Hallo Wolfgang,

    wenn in der "data" Spalte deiner Tabelle ein Base64 codierter String steht, kannst Du das nicht mittels SQL als XML verarbeiten. Die Anwendung müsste den Inhalt lesen, Base64 Decode drüberlaufen lassen und dann als XML parsen.

    Es wäre daher wohl sinnvoller, den XML Inhalt in eine XML Spalte zu packen und nicht in eine image Spalte (wobei ich mich eh frage, warum man das macht und nicht [n]varchar( MAX ), wenn eh kein binärer Inhalt vorkommt.

    Ein kurzer Test zeigt allerdings, dass das, was in data steht, kein Base64 ist. Zumindest lässt es sich nicht decodieren. Ist das evtl. zusätzlich noch verschlüsselt?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. März 2017 12:08
    Moderator
  • Hallo Stefan,

    danke für die bisherigen Infos. Ich muss noch ergänzen, dass es sich bei den data´s um sogenannte Blobs handelt. Vielleicht hilft das weiter.  Ob das noch zusätzlich verschlüsselt ist, entzieht sich meiner Kenntnis. Ich hatte mir das einfacher vorgestellt. Ich kann mal kurz die Lesbare Variante zeigen, allerdings muss ich manche Daten löschen:

    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <!--This data is only for scientific analysis-->
    <ScientificExport CreateDate="2017-03-17T12:42:51.7060807+01:00" SchemaVersion="6.0.1" TrainingSet="false">
      <ExportSoftware Name="Version=6.0.1 Build 5456.33222" />
      <Patients Count="1" Anonymized="false">
        <Patient PatientKey="ebbb92d9-0de0-4403-ab6d-0143ffc9ac0d">
          <FirstName>Helmut</FirstName>
          <MiddleName />
          <LastName>__Grumme</LastName>
          <Birthday>1900-01-01</Birthday>
          <Gender>male</Gender>
          <Comment /> ....

    Das muss in der Spalte data drin stehen.

    Gruß Wolfgang

    Freitag, 17. März 2017 12:46
  • Hallo Wolfgang,

    wie gesagt, den String, den Du gepostet hast, konnte ich nicht mit Base64 Decode in eine lesbare Form bringen.

    Daher wirst Du nicht umhin kommen, denjenigen, der die Daten dort ablegt zu fragen, in welchem Format das passiert.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 17. März 2017 13:48
    Moderator