Laden...

länge des MySQL Result aus dem Reader bestimmen?!

Erstellt von wolle- vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.181 Views
W
wolle- Themenstarter:in
53 Beiträge seit 2007
vor 14 Jahren
länge des MySQL Result aus dem Reader bestimmen?!

verwendetes Datenbanksystem: MySQL

Hallo Zusammen,

auf gut Glück hier nochmal.

Ich habe jetzt mit 2 Leuten die Nacht rumgewälzt um herauszufinden wie dies funktionieren soll, es klappt einfach nicht!

Ich lese aus der Datenbank (MYSQL) folgendermaßen:

int[] auslesen = new int[30];

string query = "SELECT freundesid FROM freunde WHERE myID = "+ teminfo.Id;
MySql.Data.MysqlClient.MySqlDataReader r = sql_.executeQuery(query);

if (r == null)
{
  return false;
}

while (r.Read())
{
  auslesen[] = Convert.ToInt32(r.GetString(0));
}

Ausgabe ist dann folgendes: Er liest und liest und liest, bis die 30 stellen des INT Arrays belegt sind.
Das will ich jedoch nicht, die 30 soll flexibel erkannt werden - also sobald eine 0 als Zahl kommt, ist die Freundesliste fertig ausgelesen.
Mein Problem ist nun, dass hier bei 5 Freunden - 5 Zahlen und 25x 0 steht.

Wie kann ich dies denn Abfragen ich hab den Aufbau schon tausendmal umgebaut, ich komme wirklich nicht drauf.

Könnt Ihr mir hier helfen?

Vielen Dank und
Gruß Wolle

Don`t eat yellow snow 😉

1.346 Beiträge seit 2008
vor 14 Jahren

Als erstes Frage ich mich wie das hier funktionieren soll:

auslesen[] = Convert.ToInt32(r.GetString(0));

Zu deiner Frage. Anstatt eines Arrays, nimm lieber eine List<int> da kannst du dann mit Add deine zahlen reinwerfen. du kannst das dann mit ToArray() in einen array konvertieren.

Gruß pdelvo

276 Beiträge seit 2007
vor 14 Jahren

Genau das wollte ich auch schreiben^^...!

Mit List.add fügst du dann einfach was der Liste hinzu und kannst dann, wenn du nur 30 Freunde willst irgendwo, einfach nur die ersten 30 nehmen 😉

Gruß

nitro

W
wolle- Themenstarter:in
53 Beiträge seit 2007
vor 14 Jahren

Hallo ihr zwei,

danke für die Antwort!

Also der hat die zahlen schon genauso wie ich wollte in das Array geschrieben, das hat also funktioniert nur halt auch alle 0er ne.

Wie kann ich denn bei der List erkennen wann die erste 0 kommt und ab da nicht mehr weiter lassen?

Zweiteres, wie mach ich denn in einer Konsolenanwendung eine List?!
Es handelt sich hierbei um einen Server der keine GUI braucht, muss ich die Windows.Forms einfach hinzufügen (wäre ja nicht schlimm) und kann die List dann trotzdem normal nutzen?

Gruß Wolle

Don`t eat yellow snow 😉

4.506 Beiträge seit 2004
vor 14 Jahren

Hallo wolle-,

Es handelt sich hierbei um einen Server der keine GUI braucht, muss ich die Windows.Forms einfach hinzufügen (wäre ja nicht schlimm) und kann die List dann trotzdem normal nutzen?

Bist Du sicher, dass wir von der gleichen "List" reden? Ich denke es ist diese hier gemeint: MSDN - System.Collections.Generic.List Klasse

Diese Liste ist selbstverständlich auch ohne WinForms nutzbar.

Grüße
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

276 Beiträge seit 2007
vor 14 Jahren

sowas wie



if(r.GetString(0) == "0")  {

// Diddy do it!

}

vielleicht?

Liste machst du mit



List<string> MyList = new List<string>();


hinzufügen kannst du da was mit


MyList.add(..);

Je nach deinem Datentyp halt...!
Die kannst du ganz normal nutzen...war das deine Frage?

R
234 Beiträge seit 2007
vor 14 Jahren

Er liest und liest und liest, bis die 30 stellen des INT Arrays belegt sind.
Das will ich jedoch nicht, die 30 soll flexibel erkannt werden - also sobald eine 0 als Zahl kommt, ist die Freundesliste fertig ausgelesen.
Mein Problem ist nun, dass hier bei 5 Freunden - 5 Zahlen und 25x 0 steht.

Das ist eine Eigenheit des Arrays. Leere Felder werden zunächst mit einem Standardwert "befüllt". Bei int ist das halt 0, bei object etc. wäre es null. Was du suchst ist die generische Liste List<int>, wie hier auch schon erwähnt wurde.

/Edit:

Wie kann ich denn bei der List erkennen wann die erste 0 kommt und ab da nicht mehr weiter lassen?

Gar nicht. Es liegt ja nicht an deinem SQL-Result, dass dort 0 steht, sondern am Array an sich.

W
wolle- Themenstarter:in
53 Beiträge seit 2007
vor 14 Jahren

Vielen Dank,

das Erklärt einiges!

Es läuft - Super!!

Das freut mich jetzt aber 🙂))

Stimmt der Standartwert kommt aus dem Array - in der DB stehen ja garkeine 0en!! 👅 👍

Gruß Wolle

Don`t eat yellow snow 😉

3.003 Beiträge seit 2006
vor 14 Jahren

SqlCommand cmd = new SqlCommand("SELECT freundesid FROM freunde WHERE myId=@myId", mySqlConnection);
cmd.Parameters.Add("@myId", System.Data.SqlDbType.NVarChar).Value = temInfo.Id;
List<int> result = null;
using (SqlDataReader reader = cmd.ExecuteReader())
{
    if (reader.HasRows)
    {
        result = new List<int>();
        while (reader.Read())
        {
            result.Add(reader.GetInt32(reader.GetOrdinal("Freundesid"));
        }
    }
}
return result;

a) Parameter benutzen
b) List<int> benutzen, wie schon gesagt wurde
c) Liste einzeln füllen - wie schon gesagt wurde, kannst du das array so, wie du es machst, gar nicht füllen

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

W
wolle- Themenstarter:in
53 Beiträge seit 2007
vor 14 Jahren

Hallo nochmal,

ich hab mich gerade mal durchs Forum und MSDN geschaut.

Was ich jedoch nicht finde ist, wie ich die List nacheinander einfach wieder ausgebe!?

in die List habe ich am Ende auch eine 0 eingetragen um jetzt eine Abfrage zu machen

Listbox ausgabe bis Item = 0.

Muss ich hier den Index wählen?

Danke und

Gruß Wolle

Don`t eat yellow snow 😉

3.003 Beiträge seit 2006
vor 14 Jahren

//List<int> myList;
foreach(int listEntry in myList)
{
   Console.WriteLine("Eintrag: {0}", listEntry);
}

[Hinweis] Wie poste ich richtig?, Punkt 1.1.1 beachten, bitte.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)