Announcement

Collapse
No announcement yet.

mysql abfrage funktioniert nicht richtig

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

  • mysql abfrage funktioniert nicht richtig

    Hallo.

    Ich habe eine mysql abfrage in Visual c#, jedoch funktioniert diese nicht richtig, da sie immer nur die erste reihe der Tabelle ausgibt...
    Woran kann das liegen?

    Code:
    string myConnectionString = "SERVER=localhost;" +
                                "DATABASE=gc;" +
                                "UID=root;" +
                                "PASSWORD=;";
    
                MySqlConnection connection = new MySqlConnection(myConnectionString);
                MySqlCommand command = connection.CreateCommand();
                command.CommandText = "SELECT ID FROM gc_spieler";
                MySqlDataReader Reader;
                connection.Open();
                Reader = command.ExecuteReader();
    
                listBox1.Items.Add(Reader.FieldCount);
    
                string[] arrayDaten;
                arrayDaten = new string[Reader.FieldCount];
                
                while (Reader.Read())
                {
                        for (int i = 0; i < Reader.FieldCount; i++)
                        arrayDaten[i] = Convert.ToString(Reader.GetValue(i));    
                }
    Danke für eure Antworten!
    Zuletzt editiert von gfoidl; 30.07.2009, 17:22. Reason: Titel korrekt geschrieben

  • #2
    Hallo und willkommen,

    ich verstehe Frage und Problem nicht: Dein Sql-Befehl fragt nur nach einem Feld, nämlich der ID. Wieso erwartest du dann, dass FieldCount > 1 sein könnte und das Ziel-Array mehr als ein Element bekommen sollte? Für Reader.Read ist also die for-Schleife völliger Quatsch, oder?

    Außerdem würde ich erwarten, dass immer nur die letzte Zeile ausgelesen wird; denn für arrayDaten benutzt du bei GetValue immer dasselbe Array, das in jedem Durchgang der while-Schleife neue Werte bekommt.

    Was soll das also?

    Jürgen

    Comment


    • #3
      danke schonmal für deine Antwort!

      Das er nur nach der ID fragt ist richt. Allerdings befinden sich in der Tabelle mehrere Einträge, so dass er eigendlich mehrere ID´s auslesen müsste, oder nicht!?

      Comment


      • #4
        Das er nur nach der ID fragt ist richt. Allerdings befinden sich in der Tabelle mehrere Einträge, so dass er eigendlich mehrere ID´s auslesen müsste, oder nicht!?
        Ja, aber

        listBox1.Items.Add(Reader.FieldCount);
        FieldCount ist 1. Du schreibst also den Wert 1 in die Listbox. Warum auch immer?

        Code:
        arrayDaten = new string[Reader.FieldCount];
        FieldCount ist weiterhin 1. Also erhälst du ein Array der Länge 1. Der Sinn eines Arrays der Länge 1? Hmmm...

        Code:
        while (Reader.Read()) 
        {
            for (int i = 0; i < Reader.FieldCount; i++)
            arrayDaten[i] = Convert.ToString(Reader.GetValue(i));    
        }
        Nun iterierst du über Zeilen (nicht Felder) also wird die while Schleife n*mal ausgeführt. Die for Schleife geht wieder über Fieldcount also genau 1 mal(um Jürgen zu zitieren - eine Schleife die 1mal durchgeführt wird ist Quatsch) und schreibt in das Array der Länge 1 den Wert der ID. Wenn du zur Zuweisung arrayDaten[i] kommst ist i immer 0. Auch wenn du n*mal iterierst du schreibst die ID's immer an die selbe Stelle im Array(Gott sei dank, denn in deinem Array gibts ja nur 1'ne Stelle ) und überschreibst dir also die ID immer wieder.

        Comment


        • #5
          Vielen Dank für eure Hilfe!

          Das mit der ListBox war nur zum testen, weil ich versucht habe den Fehler zu finden...

          Ok, das mit Reader.FieldCount geht also nicht, aber wie bekomme ich dann herraus, wie groß das mysqlArray ist? Denn mit .Length geht das ja nicht...

          Comment


          • #6
            Im vorraus normalerweise nicht. Hängt eine wenig von der Datenbank ab. Wenn dein spezieller mySQL DataReader eine RowCount Property haben sollte hast du Glück dann benutz diese. Aber wie gesagt wieviele Rows es gibt kann der Datareader eigentlich erst dann wissen wenn er die geholt hat also nach den Aufrufen von Datareader.Read().

            Warum benutzt du nicht einfach eine List<string> anstatt einem Array? Dann mußt du nicht schon im vorraus die Länge wissen.

            Comment


            • #7
              super! Jetzt gehts Vielen dank für den Tip mit der List<string>

              Comment


              • #8
                Gut, das half in dieser Situation. Du musst aber offensichtlich noch genauer nachdenken, beispielsweise über den Unterschied zwischen Field (= Column) und Row, sonst reden wir immer wieder aneinander vorbei. Jürgen

                Comment

                Working...
                X