schleife in schleife

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      schleife in schleife

      schleife in schleife
      Hallo, ich glaub ich bin grade zu doof ne schleife zu bauen ^^ ... ich hoffe jemand kann mir dabei helfen

      also ich habe ein array mit Namen, die bei jedem aufruf unterschiedlich angeordnet sind und das array ist auch nicht immer gefüllt

      nun möchte ich dieses array mit meiner datenbank abgleichen, wenn der Name nicht drin ist, dann füge ihn ein und wenn er schon drin ist untersuche den nächsten namen.

      hier ist mein code:


      Quellcode

      1. MySqlConnection con = new MySqlConnection("DATENBANK DATEN");
      2. MySqlCommand cmd = new MySqlCommand("Select Name FROM Kunde ;");
      3. cmd.Connection = con;
      4. con.Open();
      5. MySqlDataReader reader = cmd.ExecuteReader();
      6. int k = Kundecount()-1; // es wird gezählt, wieviel einträge es in der Datenbank gibt
      7. while (reader.Read())
      8. {
      9. for (int i=0; i <= name.Length-1; i++) // name ist das array was übergeben wird, und die schleife soll so oft ausgeführt werden, bis das ende des arrays erreicht ist
      10. {
      11. for (int j = 0; j <= k; j++) // Die schleife soll so oft durchlaufen werden, wie es einträge in der Datenbank gibt
      12. {
      13. if (name != reader.GetString(0)) // gibt es den namen nicht?
      14. {
      15. newuser(name); //füge den namen hinzu
      16. reader.Read(); //lese die nächste zeile in der Datenbank
      17. }
      18. }
      19. }
      20. }
      21. con.Close();
      Alles anzeigen



      habe nun eine andere lösung gefunden.


      Quellcode

      1. MySqlConnection con = new MySqlConnection("");
      2. MySqlCommand cmd = new MySqlCommand("SELECT Name FROM Kunde WHERE Name = '" + name + "'");
      3. cmd.Connection = con;
      4. con.Open();
      5. MySqlDataReader reader = cmd.ExecuteReader();
      6. if (reader.HasRows)
      7. { }
      8. else
      9. {
      10. if (name != null)
      11. {
      12. newuser(name);
      13. }
      14. }
      15. con.Close();
      Alles anzeigen


      aber evtl weiß jemand trotzdem ob das mit meinem ersten lösungsansatz gehen würde ;p

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Angus131 ()

      Ich würde dir erstmal empfehlen mit einem Object-Relation-Mapper zu arbeiten, empfehlen kann ich da nHibernate, das hat den Vorteil, dass du für Standart Abfragen wie das holen aller Datensätze, eines Datensatzes, UPDATE, CREATE, DELETE usw. keine eigenen Querys erstellen musst, aber das nur am Rande.

      Die zweite Lösung ist sehr bescheiden, da du da viel zu oft an die Datenbank gehst und das dein Programm extrem ausbremsen wird.

      Ich würde wie folgt vorgehen:
      1. Hole eine Liste aller Namen in der DB
      2. Lösche alle Einträge aus "name" die in der Liste der DB vorhanden sind (siehe dazu List.remove)
      3. Füge die verbleibenden Elemente in die DB ein.
      Das geht auch, aber ist unpraktisch, wenn er mit der Liste noch was machen will bspw. für den Benutzer ausgeben, so dass der weiß welche Datensätze erstellt wurden.
      Ist aber reine Spekulation ,da der TE sich seit knapp 2 Wochen nemmer gemeldet hat ;)
      Nur eine Anmerkung nebenbei. Die Klasse MySqlConnection implementiert das Interface IDisposable. Das bedeutet, dass du using-Direktiven verwenden kannst. Das bringt vor allem zwei Vorteile:
      1. Lesbarkeit siehe unten. Mit der using-Direktive sieht das ganze etwas übersichtlicher aus.
      2. Dispose, die using-Direktive kümmert sich selbst darum die verbindung zu trennen und Ressourcen wieder freizugeben.

      Das ganze würde wie folgt aussehen:

      Quellcode

      1. using (MySqlConnection con = new MySqlConnection(deinConnectionString))
      2. {
      3. using (MySqlCommand com = con.CreateCommand())
      4. {
      5. com.CommandText = "Select Name FROM Kunde";
      6. con.Open();
      7. //usw......
      8. }
      9. }