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.
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
}
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())
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"];
}
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.
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.
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.
while (dr.Read())
{
for (int i = 0; i < dr.FieldCount; i++)
{
subjob.Items.Add(dr[i]);
}
}
zeilen in einer Spalte lesen