Announcement

Collapse
No announcement yet.

Datenbank in XML Datei laden?

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

  • Datenbank in XML Datei laden?

    Hey,

    ich versuche grade eine Datenbank in eine XML-Datei zu laden, allerdings funktioniert das nicht so ganz. Hier mal der komplette Code soweit:

    Code:
    MySqlConnection sql_connection = new MySqlConnection();   
    MySqlCommand sql_command = new MySqlCommand();            
    MySqlDataReader sql_reader;
    
    private string Anmeldung_DB()
    {
        string Anmeldung_an_DB = "SERVER=localhost;" + "UID=Test;" +  
                                            "PASSWORD=Test;" + "DATABASE=test;";
    
        return Anmeldung_an_DB;
    }
    
    private void dateiSpeichernXMLToolStripMenuItem_Click(object sender, EventArgs e)
    {
        sql_connection.ConnectionString = Anmeldung_DB();
        sql_command.CommandText = "select * from Eintrag";
        MySqlDataAdapter sql_adapter = new MySqlDataAdapter(sql_command);
        MySqlCommandBuilder cmd_builder = new MySqlCommandBuilder(sql_adapter);
        DataSet daten_aus_db = new DataSet();
    
        sql_command.Connection = sql_connection;
        sql_adapter.Fill(daten_aus_db, sql_command.CommandText);
    
        try
        {
            sql_connection.Open();
            sql_command.Connection = sql_connection;
            sql_reader = sql_command.ExecuteReader();   
    
            while(sql_reader.Read())
            {
                daten_aus_db.WriteXml(@"E:\Datenbank.xml");
            }
            sql_connection.Close();
        }
        catch(Exception ex)
        {
            MessageBox.Show("Ein Fehler ist aufgetreten!\n\n" + ex.Message, "Fehler!",
                            MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
    Ich kriege keinen Fehler aber die Datei ist leer, es steht dort nur:

    <?xml version="1.0" standalone="yes"?>
    <NewDataSet />

    Mein Ziel ist es, das die komplette Datenbank in der XML-Datei steht, diese besteht derzeit eh nur aus einer Tabelle und ca. 20 Datensätzen.
    Diese würden da dann doch auch mit eingetragen werden oder sehe ich das falsch?
    Zuletzt editiert von Threin; 02.01.2014, 00:13. Reason: Thread Titel angepasst

  • #2
    Der MySqlDataReader liest einzelne Daten aus -> siehe dazu die Beschreibung unter MySQL

    Das Dataset -sofern es das hier ist (http://msdn.microsoft.com/de-de/libr...vs.110%29.aspx) - kann ebenfalls Daten enthalten.

    Jedoch mischt du hier zwei Zugriffstechniken (MS und MySQL-spezifisch). Dein Dataset enthält keine Daten (wo wird es gefüllt?) und der MySqlDataReader enthält die Daten und du iterrierst über diesen, aber du benutzt ihn nicht -> Siehe Zugriffsmethoden GetString, GetBytes usw.
    Christian

    Comment


    • #3
      Naja, ich habe das ganze jetzt mal umgebaut und ich denke, das Dataset die sinnvollere Methode ist, allerdings komme ich grad nicht weiter:

      Code:
      private void dateiSpeichernXMLToolStripMenuItem_Click(object sender, EventArgs e)
      {
          sql_connection.ConnectionString = Anmeldung_DB();
          sql_command.CommandText = "select * from Eintrag";
          DataSet daten_aus_db = new DataSet();
          DataTable eintraege = new DataTable("Eintrag");
          daten_aus_db.Tables.Add(eintraege);
                  
          try
          {
              sql_connection.Open();
              sql_command.Connection = sql_connection;
              sql_command.ExecuteNonQuery();
      
              foreach(DataRow row in eintraege.Rows)
              {
                  daten_aus_db.WriteXml(@"E:\Datenbank\Datenbank.xml");
              }
              sql_connection.Close();
          }
          catch(Exception ex)
          {
              MessageBox.Show("Ein Fehler ist aufgetreten!\n\n" + ex.Message, "Fehler!",
                              MessageBoxButtons.OK, MessageBoxIcon.Error);
          }
      }
      Jetzt fülle ich das Dataset ja mit der Datatable aber ich erhalt immer noch nichts. Keine Fehlermeldung und auch leider keine Datei.
      Zuletzt editiert von Threin; 01.01.2014, 23:19.

      Comment


      • #4
        Der Zugriff erfolgt immer noch über die MySQL Komponenten (Verbindung herstellen, Select-Statement)

        Bloß weil du nun weitere MS-Klassen definierst hast, haben die deshalb noch keine Verbindung zur DB und keine Daten. Woher sollte die Verbindung kommen?
        Bei der Nutzung von MS-Klassen und WriteXML würden außerdem die im Dataset vorhandenen Daten komplett geschrieben werden. Eine Schleife wäre nicht erforderlich.

        Wie wäre es, EINE Zugriffart zu nutzen und nicht zu mixen.....

        EDIT

        Des Weiteren ist es im Sprachgebrauch so, wenn eine Datei geschrieben wird, dass man "in die Datei schreibt". Deshalb heisst der Befehl auch WriteXML. Man schreibt also in eine XML-Datei und nicht man "läd eine XML-Datei". Das ist der gegenteilige Vorgang...das lesen
        Zuletzt editiert von Christian Marquardt; 01.01.2014, 19:48.
        Christian

        Comment


        • #5
          Hm, habe es jetzt hingekriegt.
          Das mit der Beschreibung ist echt misslungen aber naja. Ist doch auch eine gültige Aussprache oder nicht?

          Der Aufbau der xml datei sieht so aus:

          Code:
          <?xml version="1.0" standalone="yes"?>
          <NewDataSet>
            <Table>
              <ID>1</ID>
              <Vorname>Angelo</Vorname>
              <Nachname>Kaids</Nachname>
              usw ...
            </Table>
          </NewDataSet>
          Die Datei könnte man doch jetzt auch einfach wieder in die DB laden oder brauch man dazu auch eine xsl datei?
          Ich verstehe das nicht ganz, mit der Xsl datei. Brauch man die nur, wenn die Datenbank bzw. die Tabelle noch nicht steht?

          Ich würde das jetzt so versuchen:

          Code:
          private void dateiÖffnenXMLToolStripMenuItem_Click(object sender, EventArgs e)
          {
              string path = @"E:\Datenbank\Datenbank.xml"; // Pfad zur Datei
          
              DataTable tabelle = new DataTable("Eintrag");
              DataSet daten_aus_datei = new DataSet();
              try
              {
                  FileStream file_stream = new FileStream(@"E:\Datenbank\Datenbank.xml", FileMode.Open, FileAccess.Read);
                  StreamReader stream_reader = new StreamReader(file_stream);
                  daten_aus_datei.ReadXml(sr);
              }
              catch (Exception ex)
              {
                  MessageBox.Show("Es ist ein Fehler beim lesen aufgetreten!\n\n" + ex.Message, "Fehler!",
                                  MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
          }
          Dann wären die Dateien doch im Dataset daten_aus_datei oder?
          Zuletzt editiert von Threin; 01.01.2014, 23:30.

          Comment


          • #6
            daten_aus_datei.ReadXml(sr);
            Wer ist sr? Schon die IDE müsste das als Fehler anmerken?
            Christian

            Comment


            • #7
              Der sr ist eigentlich der StreamReader.
              Hatte das wohl nach dem kopieren ins Forum geändert.

              Comment

              Working...
              X