1. Forum
    1. Unerledigte Themen
  2. Artikel
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  4. Blog
    1. Artikel
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Blog-Artikel
  • Seiten
  • Erweiterte Suche
  1. StageTwo - Deine Wohlfühloase
  2. Developer & GFX Section
  3. Coding Allgemein
  4. Coding Snippets
  5. C#

schleife in schleife

  • Angus131
  • 7. Mai 2013 um 00:28
  • Angus131
    Anfänger
    Punkte
    130
    Beiträge
    18
    • 7. Mai 2013 um 00:28
    • #1

    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:


    Code
    MySqlConnection con = new MySqlConnection("DATENBANK DATEN");
    MySqlCommand cmd = new MySqlCommand("Select Name FROM Kunde ;");
    cmd.Connection = con;
    con.Open();
    MySqlDataReader reader = cmd.ExecuteReader();
    int k = Kundecount()-1; // es wird gezählt, wieviel einträge es in der Datenbank gibt 
    
    
    while (reader.Read())
    {
    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
    {
    for (int j = 0; j <= k; j++) // Die schleife soll so oft durchlaufen werden, wie es einträge in der Datenbank gibt
    {
    if (name != reader.GetString(0)) // gibt es den namen nicht?
    {
    newuser(name); //füge den namen hinzu
    reader.Read(); //lese die nächste zeile in der Datenbank
    }
    }
    }
    }
    con.Close();
    Alles anzeigen


    habe nun eine andere lösung gefunden.


    Code
    MySqlConnection con = new MySqlConnection("");
     MySqlCommand cmd = new MySqlCommand("SELECT Name FROM Kunde WHERE Name = '" + name + "'");
     cmd.Connection = con;
     con.Open();
     MySqlDataReader reader = cmd.ExecuteReader();
     if (reader.HasRows)
     { }
     else
     {
     if (name != null)
     {
     newuser(name);
     }
     }
     con.Close();
    Alles anzeigen

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

    Einmal editiert, zuletzt von Angus131 (7. Mai 2013 um 00:28)

  • Ennosuke
    Profi
    Punkte
    3.125
    Beiträge
    604
    Geburtstag
    9. Mai 1990 (36)
    Geschlecht
    Männlich
    • 7. Mai 2013 um 08:55
    • #2

    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.

  • dongdong
    Das Beste oder nichts
    Reaktionen
    1
    Punkte
    3.766
    Beiträge
    731
    Geburtstag
    1. August 1992 (34)
    Geschlecht
    Männlich
    • 22. Mai 2013 um 10:15
    • #3

    Sql kann selber prüfen, ob der Eintrag vorhanden ist und dann angemessen reagieren. Lies dir am besten mal diesen Artikel dazu durch
    http://www.use-blog.de/datenbanksyste…-insert-ignore/


    Danke an xNiGhTMaR3x für die Signatur und Avatar =)

  • Ennosuke
    Profi
    Punkte
    3.125
    Beiträge
    604
    Geburtstag
    9. Mai 1990 (36)
    Geschlecht
    Männlich
    • 22. Mai 2013 um 10:47
    • #4

    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 ;)

  • Kaesebrot
    Anfänger
    Punkte
    10
    Beiträge
    2
    • 9. Februar 2015 um 08:01
    • #5

    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:

    • Lesbarkeit siehe unten. Mit der using-Direktive sieht das ganze etwas übersichtlicher aus.
    • Dispose, die using-Direktive kümmert sich selbst darum die verbindung zu trennen und Ressourcen wieder freizugeben.


    Das ganze würde wie folgt aussehen:

    Code
    using (MySqlConnection con = new MySqlConnection(deinConnectionString))
                {
                        using (MySqlCommand com = con.CreateCommand())
                        {
                                  com.CommandText = "Select Name FROM Kunde";
                                  con.Open();
                                  //usw......
                        }
                }
  • Perplex
    Ich handle nicht mehr rational! - Robbenschlachten!
    Reaktionen
    247
    Punkte
    8.842
    Beiträge
    1.549
    • 9. Februar 2015 um 14:40
    • #6

    Glückwunsch! Achievement Unlocked "Thread von vor fast 2 Jahren ausgegraben" ;)

    "Gesegnet seien jene, die nichts zu sagen haben und den Mund halten."- Oscar Wilde

  • Kaesebrot
    Anfänger
    Punkte
    10
    Beiträge
    2
    • 11. Februar 2015 um 08:18
    • #7

    Ja das war der neueste :D

Tags

  • schleife datenbankabgleich

Benutzer online in diesem Thema

  • 1 Besucher
  1. Datenschutzerklärung
  2. Impressum