ti-enxame.com

Como faço loop através de linhas com um leitor de dados em c #?

Eu sei que eu posso usar while(dr.Read()){...} mas que faz um loop em todos os campos da minha tabela, eu quero recuperar todos os valores da primeira linha e, em seguida, segundo ... e assim por diante.

Vamos dizer que eu tenho uma mesa assim:

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

primeiro eu quero obter, hello, hello2 e hello3 e, em seguida, ir para a segunda linha e obter todos os valores.

Existe uma maneira de conseguir isso? Espero que alguém entenda o que quero dizer.

Sinto muito, isso está resolvido agora. Eu simplesmente não estava codificando certo ...

E sim o método SqlDataReader.Read () faz o que é suposto fazer, mais uma vez o erro foi meu.

39
Slacker616

Essa é a maneira como o DataReader funciona, ele é projetado para ler as linhas do banco de dados, uma de cada vez.

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

Nota; se você tiver várias grades, então:

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

Ou você pode tentar acessar as colunas diretamente pelo nome:

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

Não há como obter "a linha inteira" de uma só vez - é necessário percorrer as linhas e, para cada linha, você precisa ler cada coluna separadamente:

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

O que você faz com essas cadeias de caracteres que você lê para cada linha é inteiramente com você - você pode armazená-las em uma classe que você definiu, ou o que quer que seja ....

6
marc_s

Como faço loop através de linhas com um leitor de dados em c #?

IDataReader.Read() avança o leitor para a próxima linha no conjunto de resultados.

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

Então, para cada iteração do seu loop, você faria outro loop, 0 para reader.FieldCount, e chamaria reader.GetValue(i) para cada campo.

A questão maior é que tipo de estrutura você deseja usar para armazenar esses dados?

3
canon

Na verdade, o método Read iterando sobre registros em um conjunto de resultados. No seu caso - sobre as linhas da tabela. Então você ainda pode usá-lo.

1
Yuriy Rozhovetskiy