Announcement

Collapse
No announcement yet.

Datableinhalt richtig in xml-Feldtyp am MSSQL-Server schreiben

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

  • Datableinhalt richtig in xml-Feldtyp am MSSQL-Server schreiben

    hallo,
    wie kann ich richtig bzw. optimalst den Inhalt einer Datatable in ein xml-Feld einer MSSQL-Datenbanktabelle schreiben?

    Eine Datatable kann ich in ein xml-file schreiben.

    Code:
                    Console.WriteLine("Start des XML-Exports");    
                    foreach (DataTable table in dataSet.Tables)
                    {
                        Console.WriteLine("   Tabellenname: " + table.TableName);
    
                        // Ausgabe als XML-Datei neben der exe
                        table.WriteXml(table.TableName + ".xml");
    
                         }
                    Console.WriteLine("Ende des XML-Exports");
    Das vollständige DataSet in ein xml-Feld bekomme ich auch hin.

    Code:
     cmd.Parameters.Add("@xmlBenutzer", SqlDbType.Xml).Value = dataSet.GetXml();
    Aber wie kann ich den Inhalt einer einzelnen Datatable in ein xml-Feld schreiben? GetXml gibt es leider nicht für Datatable

  • #2
    Sieh dir WriteXml der Datatable an.

    Comment


    • #3
      hallo,
      schreibt das nicht alles in eine Datei? Das wäre ein Umweg!?

      Oder was genau ist ein Stream bzw. System.IO.Stream?

      Comment


      • #4
        schreibt das nicht alles in eine Datei? Das wäre ein Umweg!?
        Ein Stream ist erstmal nur eine Menge von Bytes. Die kann einem File entsprechen oder irgend etwas anderes. Ob es ein Umweg ist kannst du selbst entscheiden. Es führt aber zumindest zu einer Lösung

        In deinem Fall würde sich z.B. ein MemoryStream eignen den man dann mit einem StreamReader in einen string schreiben kann. Und dein XML als string solltest du ja irgendwie in deiner Datenbank untergebracht bekommen.

        PS. Warum verwandelt man ein relationales Model(Dataset) in ein XML um es dann als solches wieder in einer relationalen Datenbank(SQL Server) abzulegen. Ist das nicht ein Umweg

        Comment


        • #5
          Vielen Dank, dann werde ich mal mit dem Stream testen.


          Originally posted by Ralf Jansen View Post
          PS. Warum verwandelt man ein relationales Model(Dataset) in ein XML um es dann als solches wieder in einer relationalen Datenbank(SQL Server) abzulegen. Ist das nicht ein Umweg
          Der Plan ist die Datenbankzugriffe gering zu halten bzw. die Laufzeit der Anwendung. Erster Ansatz war das die Daten pro Datatable per Zeile an die Datenbank übertragen werden. Bzw. sogar ohne Datatable direkt von der AD-Quelle. Hätte Daten aber mehrfach redundant übertragen. Da es um Gruppenmitgliedschaften geht und zusätzlich zur Mitglied-Info alle Daten der Gruppen und Benutzer benötigt werden war für mich der nächste Ansatz in normalisierter Datenbank-Denke die Daten in Gruppen, Benutzer und Mitgliedschaften aufzuteilen.

          Also habe ich nun 3 Datatables mit atomaren Daten und diese sollen in den SQL-Server zur weiteren Verarbeitung. War für mich der übersichtlichste Ansatz alle Daten in einer Zeile in 3 verschiedenen xml-Felder zu speichern.

          Gibt es einen besseren Ansatz? Evtl. kann man das Dataset direkter in den SQL-Server bekommen?

          Comment


          • #6
            Ich verstehs nicht. Normalerweise würde man halt einfach die DataTables analog in der Datenbank anlegen. Schneller gehen tut das mit dem XML mit Sicherheit nicht. Warum sollten denn Gruppen, Mitglieder und Benutzer nicht in einer Datenbank abgelegt werden? Ich finde die XML Geschichte eher hinderlich. Noch dazu generierst Du mit XML einen ziemlichen Datenoverhead, da Du jedesmal sämtliche MetaInformation (Tags) mitschicken musst.

            Comment


            • #7
              stimmt, Overhead habe ich durch die xml-Tags

              überlege ich mir mal das noch umzubauen.

              Für die welche es interessiert, so geht es:

              string BEN;
              using (StringWriter BENsw = new StringWriter())
              {
              BENtable.WriteXml(BENsw);
              BEN = BENsw.ToString();
              }

              Comment

              Working...
              X