Подтвердить что ты не робот

Как мне перебирать строки с помощью устройства чтения данных в С#?

Я знаю, что могу использовать while(dr.Read()){...}, но это все петли в моей таблице, я хочу получить все значения из первой строки, а затем второй... и т.д.

Скажем, у меня есть таблица вроде этого:

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

сначала я хочу получить hello, hello2 и hello3, а затем перейти ко второй строке и получить все значения.

Есть ли способ достичь этого? Я надеюсь, что кто-то поймет, что я имею в виду.

Мне очень жаль, это решено сейчас. Я просто не правильно кодировал...

И да, метод SqlDataReader.Read() делает то, что он должен делать, снова ошибка была моей.

4b9b3361

Ответ 1

То, как работает DataReader, предназначено для чтения строк базы данных по одному.

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
}

Ответ 2

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

Примечание; если у вас несколько сеток, то:

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

Ответ 3

Или вы можете попытаться получить доступ к столбцам напрямую по имени:

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

Ответ 4

Как я прокручиваю строки с помощью устройства чтения данных в С#?

IDataReader.Read() продвигает читателя к следующей строке в наборе результатов.

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

Итак, для каждой итерации вашего цикла вы должны сделать еще один цикл от 0 до reader.FieldCount и вызвать reader.GetValue(i) для каждого поля.

Чем больше вопрос, какую структуру вы хотите использовать для хранения этих данных?

Ответ 5

Невозможно сразу получить "целую строку" - вам нужно прокручивать строки, и для каждой строки вам нужно прочитать каждый столбец отдельно:

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

Что вы делаете с теми строками, которые вы читаете для каждой строки, полностью зависит от вас - вы можете сохранить их в определенный вами класс или что угодно....

Ответ 6

Фактически метод Read выполняет итерацию по записям в результирующем наборе. В вашем случае - над строками таблицы. Таким образом, вы все еще можете использовать его.

Ответ 7

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

для чтения строк в одной колонке

Ответ 8

Предположим, что ваш DataTable имеет следующие столбцы, попробуйте этот код:

DataTable dt =new DataTable();
txtTGrossWt.Text = dt.Compute("sum(fldGrossWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldGrossWeight)", "").ToString();
txtTOtherWt.Text = dt.Compute("sum(fldOtherWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldOtherWeight)", "").ToString();
txtTNetWt.Text = dt.Compute("sum(fldNetWeight)", "").ToString() == "" ? "0" : dt.Compute("sum(fldNetWeight)", "").ToString();
txtFinalValue.Text = dt.Compute("sum(fldValue)", "").ToString() == "" ? "0" : dt.Compute("sum(fldValue)", "").ToString();