2013-07-30 4 views
-1

Мне нужно преобразовать несколько строк данных, которые я извлекаю из DataTable из списка в строку, разделенную запятыми. Вот что у меня есть сейчас. Он вообще не работает (он показывает System.Data.DataRow,System.Data.DataRow в окне сообщения), однако точка останова в списке показывает правильное количество строк с правильными данными.Преобразование списка <DataRow> в строку

cmd3.Fill(badnum); 

List<DataRow> list = badnum.AsEnumerable().ToList(); 
string badnumbers = string.Join(",", list); 
MessageBox.Show(badnumbers); 
+5

Пожалуйста, определите, что «это не работает». –

+0

Или, вернее, определить вход 'List ' и ожидаемую итоговую строку. Как должен быть представлен один символ DataRow в виде строки? – stakx

ответ

3

Ваш вопрос заключается в том, как вы используете DataRow.
DataRow s содержит несколько значений.

Типичное использование относится к определенному столбцу внутри строки.

E.g. dataRow["MyColumnName"] или по индексу dataRow[0]

0

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

foreach (DataRow dr in badnum.Rows) 
     string csv = String.Join(",", row.ItemArray); 
1

string.Join() нужен string[] или IEnumerable<string>

Попробуйте это:

List<DataRow> list = badnum.AsEnumerable().ToList(); 
string badnumbers = string.Join(",", list.Select(r=>r["MyColumn"].ToString()).ToArray()); 
MessageBox.Show(badnumbers); 
+1

Действительно? http://msdn.microsoft.com/en-us/library/dd992421.aspx – Dennis

+0

Если вы используете .Net 4.0 +, вы можете использовать IEnumerable , но нижним версиям нужна строка [] –

+0

Есть ли что-то в версии .NET в вопрос? – Dennis

0

Нечто подобное должно сделать вам:

static void Main(string[] args) 
{ 
    const string connectString = "Server=localhost;Database=sandbox;Trusted_Connection=True;"; 

    DataTable dt = new DataTable() ; 
    using (SqlConnection conn = new SqlConnection(connectString)) 
    using (SqlCommand cmd = conn.CreateCommand()) 
    using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
    { 
    cmd.CommandText = @"select * from sys.objects" ; 
    cmd.CommandType = CommandType.Text; 
    conn.Open(); 
    int rows = sda.Fill(dt) ; 
    } 

    Func<string,string> qt = x => "\"" + x.Replace("\"","\"\"") + "\"" ; 

    DataRow dr = dt.Rows[0] ; 
    string csv = dt.Columns 
       .Cast<DataColumn>() 
       .Select(c => qt(c.ColumnName) + "=" + qt(dr[c].ToString())) 
       .Aggregate((acc,s) => acc + "," + s) 
       ; 
    Console.WriteLine(csv) ; 

    return ; 
} 

Определите собственную семантику для как выглядит строка.

Смежные вопросы