Как мне перебрать строки с помощью читателя данных в C #? - PullRequest
40 голосов
/ 04 декабря 2011

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

Допустим,У меня есть такая таблица:

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

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

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

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

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

Ответы [ 8 ]

67 голосов
/ 04 декабря 2011

Так работает 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
}
30 голосов
/ 04 декабря 2011
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())
18 голосов
/ 04 декабря 2011

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

while(dr.Read())
{
    string col1 = (string)dr["Value1"];
    string col2 = (string)dr["Value2"];
    string col3 = (string)dr["Value3"];
}
6 голосов
/ 04 декабря 2011

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

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

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

3 голосов
/ 04 декабря 2011

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

IDataReader.<a href="http://msdn.microsoft.com/en-us/library/system.data.idatareader.read.aspx" rel="nofollow">Read()</a> переводит читателя на следующую строку в наборе результатов.

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

Таким образом, для каждой итерации цикла вы выполняете еще один цикл, от 0 до reader.<a href="http://msdn.microsoft.com/en-us/library/microsoft.reportingservices.dataprocessing.idatareader.fieldcount.aspx" rel="nofollow">FieldCount</a>, и вызываете reader.<a href="http://msdn.microsoft.com/en-us/library/microsoft.reportingservices.dataprocessing.idatareader.getvalue.aspx" rel="nofollow">GetValue(i)</a> для каждого поля.

Большой вопрос: какую структуру вы хотите использовать для хранения этих данных?

1 голос
/ 04 декабря 2011

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

0 голосов
/ 26 марта 2015
while (dr.Read())
{
    for (int i = 0; i < dr.FieldCount; i++)
    {
        subjob.Items.Add(dr[i]);
    }
}

для чтения строк в одном столбце

0 голосов
/ 14 июля 2014

Предположим, в вашем 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...