Announcement

Collapse
No announcement yet.

Datenbank > XMl Attribut > Objekt > Steuerelement

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datenbank > XMl Attribut > Objekt > Steuerelement

    Guten Tag,

    kann mir jemand einen kurzen Überblick über die Schnittstellen geben bzw. die Vorgehensweise erklären, wenn ich folgendes vorhabe:

    Ich benutze den SQL Server 2005 und dort gibt es XML als Datentyp zur Auswahl.
    Nun habe ich eine Klasse mit mehreren Eigenschaften.
    Ein Objekt dieser Klasse würde ich gerne als XML in ein Datenbank Attribut vom Typ XML speichern.
    Es soll aber auch möglich sein dieses Attribut bzw. dieses Objekt an ein Steuerelement zu binden (z. B. ein GridView).

    Gibt es Funktionen, die ein Objekt in einen XML String schreiben?
    Sollte ich die Klasse, das Datenbank Attribut oder ein XML Schema der Klasse an ein Steuerelement binden?
    Kann man ein XML Schema überhaupt binden?

    Gruß Raimund

  • #2
    StreamWriter

    Ok, die folgende Seite hat mir ein Stück weiter geholfen:

    http://asp.dotnetheaven.com/howto/do...bjFromXML.aspx

    Es wird erklärt, wie man aus einer Klasse (.cs) eine XML Schemadatei (.xsd) erzeugt und umgekehrt. Mit Hilfe der Visual Studio Konsolenanwendung "xsd.exe".

    Nun kann ich ein Objekt erzeugen und es an meine Steuerelemente binden und die Daten mit Hilfe der XmlWriter und XmlReader Klassen von einer Datei in die andere schreiben und zwischendurch am "lebenden" Objekt auch verändern.

    [highlight=c#]
    XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
    TextReader reader = new StreamReader("..\\..\\TestPurchaseOrder.xml");
    PurchaseOrder po = (PurchaseOrder)serializer.Deserialize(reader);
    reader.Close();
    TextWriter writer = new StreamWriter("CopyOfTestPurchaseOrder.xml");
    serializer.Serialize(writer, po);
    writer.Close();
    [/highlight]

    Aber wie kann ich die XML Informationen lesen und schreiben, wenn sie in einer Datenbank liegen?

    Da meine PurchaseOrder.cs durch das Tool "xsd.exe" erzeugt wurde, ist mir der Aufbau der Datei zum Teil unverständlich. Hier ein kleiner Auszug:

    Code:
    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.1432")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlRootAttribute("purchaseOrder", Namespace="", IsNullable=false)]
    public partial class PurchaseOrder {
        ...
    }
    Was bedeuten die Zeilen nach /// <remarks/> ?
    Sind es Attribute?
    Kann mir jemand einen Link posten zu dem Thema?

    Gruß Raimund
    Zuletzt editiert von Wurzel; 16.03.2009, 13:45.

    Comment


    • #3
      Objekt laden und speichern

      Inzwischen habe ich es hinbekommen meine Objekte zu laden und zu speichern mit dem folgenden Code:

      Code:
                  XmlTestTableAdapter XmlTestTA = new XmlTestTableAdapter();
                  TestDataSet.XmlTestDataTable XmlTestDT = new TestDataSet.XmlTestDataTable();
                  TestDataSet.XmlTestRow XmlTestR = null;
      
                  XmlTestTA.Fill(XmlTestDT);
                  XmlTestR = XmlTestDT.FindByXmlTestId(3);
                  if (XmlTestR != null)
                  { 
                      // Aus Datei in Objekt laden
                      //XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
                      //TextReader reader = new StreamReader("c:\\xmltest\\TestPurchaseOrder.xml");
                      //PurchaseOrder po = (PurchaseOrder)serializer.Deserialize(reader);
      
                      // Aus Datenbank in Objekt laden
                      XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
                      TextReader reader = new StringReader(XmlTestR.XmlObject);
                      PurchaseOrder po = (PurchaseOrder)serializer.Deserialize(reader);
                      reader.Close();
      
                      // Von Objekt in StringBuilder schreiben
                      StringBuilder sb = new StringBuilder();
                      StringWriter writer = new StringWriter(sb);
                      serializer.Serialize(writer, po);
                      writer.Close();
      
                      // Von StringBuilder in Datenbank schreiben
                      XmlTestR = XmlTestDT.NewXmlTestRow();
                      XmlTestR.XmlObject = sb.ToString();
                      XmlTestDT.AddXmlTestRow(XmlTestR);
                      XmlTestTA.Update(XmlTestDT);
                      reader.Close();
                      
                      // In Datei Schreiben
                      //TextWriter writer = new StreamWriter("CopyOfPurchaseOrder.xml");
                      //serializer.Serialize(writer, po);
                      //writer.Close();
                  }
              }
      Vielleicht hilft es ja jemandem in Zukunft.

      Gruß Raimund

      Comment

      Working...
      X