web-dev-qa-db-ger.com

Wie kann ich mit einem Datenleser in C # Zeilen durchlaufen?

Ich weiß, dass ich while(dr.Read()){...} verwenden kann, aber dass sich in jedem Feld meiner Tabelle eine Schleife befindet. Ich möchte alle Werte aus der ersten Zeile abrufen und dann das zweite ... und so weiter.

Nehmen wir an, ich habe einen Tisch wie diesen:

ID--------------Value1--------------Value2------------------Value3
1               hello               hello2                  hello3
2               hi1                  hi2                      hi3

zuerst möchte ich hello, hello2 und hello3 und dann in die zweite Zeile gehen und alle Werte abrufen.

Gibt es einen Weg, dies zu erreichen? Ich hoffe jemand versteht was ich meine.

Es tut mir so leid, das ist jetzt gelöst. Ich habe einfach nicht richtig programmiert ...

Und ja, die SqlDataReader.Read () -Methode macht das, was sie tun soll, der Fehler war wiederum mein.

39
Slacker616

Auf diese Weise arbeitet DataReader, die Datenbankzeilen werden einzeln gelesen.

while(reader.Read()) 
{
  var value1 = reader.GetValue(0); // On first iteration will be hello
  var value2 = reader.GetValue(1); // On first iteration will be hello2
  var value3 = reader.GetValue(2); // On first iteration will be hello3
}
64
Rich O'Kelly
int count = reader.FieldCount;
while(reader.Read()) {
    for(int i = 0 ; i < count ; i++) {
        Console.WriteLine(reader.GetValue(i));
    }
}

Hinweis; Wenn Sie mehrere Gitter haben, dann:

do {
    int count = reader.FieldCount;
    while(reader.Read()) {
        for(int i = 0 ; i < count ; i++) {
            Console.WriteLine(reader.GetValue(i));
        }
    }
} while (reader.NextResult())
29
Marc Gravell

Oder Sie können versuchen, direkt über den Namen auf die Spalten zuzugreifen:

while(dr.Read())
{
    string col1 = (string)dr["Value1"];
    string col2 = (string)dr["Value2"];
    string col3 = (string)dr["Value3"];
}
18
Tudor

Es gibt keine Möglichkeit, "die ganze Zeile" auf einmal zu erhalten - Sie müssen die Zeilen durchlaufen, und für jede Zeile müssen Sie jede Spalte separat lesen:

using(SqlDataReader rdr = cmd.ExecuteReader())
{
    while (rdr.Read())
    {
        string value1 = rdr.GetString(0);
        string value2 = rdr.GetString(1);
        string value3 = rdr.GetString(2);
    }
}

Was Sie mit den Strings tun, die Sie für jede Zeile lesen, liegt ganz bei Ihnen - Sie können sie in einer von Ihnen definierten Klasse speichern oder was auch immer.

6
marc_s

Wie kann ich mit einem Datenleser in C # Zeilen durchlaufen?

IDataReader.Read() bringt den Leser zur nächsten Zeile im Resultset.

while(reader.Read()){
    /* do whatever you'd like to do for each row. */
}

Für jede Iteration Ihrer Schleife würden Sie also eine weitere Schleife von 0 bis reader.FieldCount ausführen und reader.GetValue(i) für jedes Feld aufrufen.

Die größere Frage ist, welche Art von Struktur Sie für die Speicherung dieser Daten verwenden möchten.

3
canon

Tatsächlich durchläuft die Read-Methode Datensätze in einer Ergebnismenge. In Ihrem Fall über Tabellenzeilen. Sie können es also immer noch verwenden.

1
while (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        subjob.Items.Add(dr[i]);
    }
}

zeilen in einer Spalte lesen

0
irfan majeed