2012-03-08 2 views
22

Ho un set di dati chiamato "risultati" con diverse righe di dati. Mi piacerebbe ottenere questi dati in una stringa, ma non riesco a capire come farlo. Sto usando il codice seguente:Come convertire i valori in una stringa?

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

Tuttavia, penso che mi manca qualcosa perché questo non funziona. Qualcuno può indicarmi la giusta direzione?

+0

Che cosa non funziona? Stai ricevendo un'eccezione da qualche parte? –

+0

Nessuna eccezione. È solo che il valore di "output" non è affatto quello che mi aspettavo. Ma, penso che le due risposte seguenti mi abbiano indirizzato verso la soluzione giusta. – Kevin

risposta

37

È necessario specificare la colonna del datarow da cui si desidera estrarre i dati.

provare quanto segue:

 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(); 
     } 
+0

Jeff, questo ha funzionato perfettamente! Grazie mille! Non ho usato molto StringBuilder, quindi sono felice di avere l'opportunità di usarlo qui. Grazie anche per il codice di esempio! – Kevin

+0

Sei molto benvenuto, StringBuilder è fantastico. Abituati a usarlo ogni volta che ti ritrovi a manipolare una stringa molte volte. – Khan

3

L'oggetto rows contiene un attributo Item in cui è possibile trovare i valori per ciascuna delle colonne. Non puoi aspettarti che le colonne si concatenino quando fai un .ToString() sulla riga. È necessario accedere a ciascuna colonna dalla riga separatamente, utilizzare uno for o uno foreach per percorrere l'array di colonne.

Qui, date un'occhiata alla classe:

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

+0

Hai ragione, Andrei. Avevo dimenticato che avrei dovuto scorrere anche le colonne nelle righe. – Kevin

4

si può ottenere un valore colonne facendo

rows["ColumnName"] 

Si dovrà lanciare al tipo approperiate .

output += (string)rows["ColumnName"] 
+0

Grazie, Matthew. Sia tu che Andrei avete ragione sul fatto di aver bisogno di ottenere i miei valori dalla colonna per ogni riga. Me ne ero totalmente dimenticato. – Kevin

20

Ho fatto questo molto me stesso. Se avete solo bisogno di un elenco separato per tutti i valori di riga si può fare questo:

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

A StringBuilder è il metodo preferito come concatenazione di stringhe è significativamente più lento per grandi quantità di dati.