Получение значений datarow в строку?

У меня есть набор данных под названием «результаты» с несколькими строками данных. Я хотел бы получить эти данные в строку, но я не могу понять, как это сделать. Я использую следующий код:

string output = "";
foreach (DataRow rows in results.Tables[0].Rows)     
{
    output = output + rows.ToString() + "\n";
}

Однако я думаю, что что-то упускаю, потому что это не работает. Может ли кто-нибудь указать мне в правильном направлении?


person Kevin    schedule 08.03.2012    source источник
comment
Что не работает? Вы где-то получаете исключение?   -  person Esteban Araya    schedule 08.03.2012
comment
Никаких исключений. Просто значение вывода совсем не то, что я ожидал. Но я думаю, что два ответа ниже привели меня к правильному решению.   -  person Kevin    schedule 08.03.2012


Ответы (4)


Вам нужно указать, из какого столбца строки данных вы хотите извлечь данные.

Попробуйте следующее:

        StringBuilder output = new StringBuilder();
        foreach (DataRow rows in results.Tables[0].Rows)
        {
            foreach (DataColumn col in results.Tables[0].Columns)
            {
                output.AppendFormat("{0} ", rows[col]);
            }

            output.AppendLine();
        }
person Khan    schedule 08.03.2012
comment
Джефф, это сработало отлично! Большое спасибо! Я вообще мало использовал StringBuilder, поэтому я рад возможности использовать его здесь. Спасибо и за пример кода! - person Kevin; 08.03.2012
comment
Не за что, StringBuilder великолепен. Привыкайте к его использованию всякий раз, когда вы обнаружите, что манипулируете строкой много раз. - person Khan; 08.03.2012

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

StringBuilder sb = new StringBuilder();
foreach (DataRow row in results.Tables[0].Rows)     
{
    sb.AppendLine(string.Join(",", row.ItemArray));
}

StringBuilder является предпочтительным методом, поскольку конкатенация строк выполняется значительно медленнее для больших объемов данных.

person SPFiredrake    schedule 08.03.2012

Вы можете получить значение столбца, выполнив это

 rows["ColumnName"]

Вы также должны будете привести к соответствующему типу.

 output += (string)rows["ColumnName"]
person Matthew    schedule 08.03.2012
comment
Спасибо, Мэтью. И вы, и Андрей были правы в отношении необходимости получать мои значения из столбца для каждой строки. Я совсем забыл об этом. - person Kevin; 08.03.2012

Ваш объект rows содержит атрибут Item, где вы можете найти значения для каждого из ваших столбцов. Вы не можете ожидать, что столбцы будут объединяться, когда вы делаете .ToString() в строке. Вы должны получить доступ к каждому столбцу из строки отдельно, используйте for или foreach для обхода массива столбцов.

Вот, взгляните на класс:

http://msdn.microsoft.com/en-us/library/system.data.datarow.aspx

person Andrei G    schedule 08.03.2012
comment
Вы правы, Андрей. Я забыл, что мне также придется перебирать столбцы в строках. - person Kevin; 08.03.2012