2012-03-08 13 views
22

Tengo un conjunto de datos llamado "resultados" con varias filas de datos. Me gustaría obtener estos datos en una cadena, pero no puedo entender cómo hacerlo. Estoy usando el siguiente código:Obteniendo valores de datarow en una cadena?

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

Sin embargo, creo que me falta algo porque esto no está funcionando. ¿Alguien me puede apuntar en la dirección correcta?

+0

¿Qué no está funcionando? ¿Estás recibiendo una excepción en alguna parte? –

+0

Sin excepción. Es solo que el valor de "salida" no es lo que esperaba. Pero, creo que las dos respuestas a continuación me han encaminado hacia la solución correcta. – Kevin

Respuesta

37

Debe especificar de qué columna del datarow desea extraer los datos.

intente lo siguiente:

 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, ¡esto funcionó a la perfección! Muchas gracias! No he usado mucho StringBuilder, así que me alegra tener la oportunidad de usarlo aquí. ¡Gracias por el código de ejemplo, también! – Kevin

+0

De nada, StringBuilder es increíble. Acostúmbrate a usarlo cada vez que te encuentres manipulando una cuerda muchas veces. – Khan

3

Su objeto rows tiene un atributo Item donde puede encontrar los valores para cada una de sus columnas. No puede esperar que las columnas se concatenan cuando hace un .ToString() en la fila. Debe acceder a cada columna de la fila por separado, use un for o un foreach para recorrer el conjunto de columnas.

Aquí, echar un vistazo a la clase:

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

+0

Tienes razón, Andrei. Había olvidado que tendría que iterar sobre las columnas en las filas también. – Kevin

4

, usted puede obtener un valor columnas haciendo

rows["ColumnName"] 

Tendrá que echar al tipo approperiate .

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

Gracias, Matthew. Tanto usted como Andrei tenían razón sobre la necesidad de obtener mis valores de la columna para cada fila. Me había olvidado por completo de eso. – Kevin

20

que he hecho esto muchas veces a mí mismo. Si sólo necesita una lista separada por comas de todos los valores de la fila se puede hacer esto:

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

Un StringBuilder es el método preferido como la concatenación de cadenas es significativamente más lento para grandes cantidades de datos.

Cuestiones relacionadas