Как мне перебирать строки с помощью устройства чтения данных в С#?
Я знаю, что могу использовать while(dr.Read()){...}
, но это все петли в моей таблице, я хочу получить все значения из первой строки, а затем второй... и т.д.
Скажем, у меня есть таблица вроде этого:
ID--------------Value1--------------Value2------------------Value3
1 hello hello2 hello3
2 hi1 hi2 hi3
сначала я хочу получить hello
, hello2
и hello3
, а затем перейти ко второй строке и получить все значения.
Есть ли способ достичь этого? Я надеюсь, что кто-то поймет, что я имею в виду.
Мне очень жаль, это решено сейчас. Я просто не правильно кодировал...
И да, метод SqlDataReader.Read() делает то, что он должен делать, снова ошибка была моей.
Ответы
Ответ 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();