2009-08-26 12 views
70

Estoy empezando a usar ADO.NET, DataSets y DataTables. Un problema que tengo es que parece bastante difícil decir qué valores hay en la tabla de datos cuando intento depurar.Cómo ver una DataTable mientras se depura

¿Cuáles son algunas de las maneras más fáciles de ver rápidamente qué valores se han guardado en una DataTable? ¿Hay alguna forma de ver los contenidos en Visual Studio durante la depuración o es la única opción para escribir los datos en un archivo?

He creado una pequeña función de utilidad que escribirá una DataTable en un archivo CSV. Sin embargo, el archivo CSV resultante se cortó. Aproximadamente 3 líneas de lo que debería haber sido la última línea en el medio de escribir un Sistema. El archivo se detiene. No puedo decir si esto es un problema con mi método de conversión de CSV, o la población original de DataTable.

actualización

Forget la última parte me olvidó para limpiar mi escritor corriente.

Respuesta

169

Con un punto de interrupción establecido, después de que se llene DataTable o DataSet, puede ver una lupa si coloca el mouse sobre la variable. Si hace clic en él, se abrirá DataTable Visualizer, que puede leer acerca de here.

En esta imagen se ve a continuación, dt es mi variable DataTable y el punto de interrupción se tocó unas pocas líneas más abajo, lo que me permite pasar el puntero sobre este valor. Utilizando Visual Studio 2008.

alt text

DataTable visualizador (image credit):
alt text

+3

Oh, hombre, no puedo creer, me lo perdí. ¡Gracias! –

+0

buen trabajo Rsolberg. ¡Una votación de mi parte! – anishMarokey

+17

OMFG, ¡¿CÓMO ME LO ME OCURRIÓ! AAAARRRGHGHGHGHGHGHG, TANTO TIEMPO DESPERDICIADO VINCULANTE A DATATABLES EN TIEMPO DE EJECUCIÓN SOLO PARA HACER ESTO! – Pierreten

1

añadí dos líneas en mi aplicación dentro de una clase lleva el nombre de la clase más externa:

public MyClass() 
    { 
     // The following (2) lines are used for testing only. Remove comments to debug. 
     System.Diagnostics.Debugger.Launch(); 
     System.Diagnostics.Debugger.Break(); 
    } 

Esto debería detener la aplicación y abrirla en modo de depuración. Luego puede atravesarlo y observar los valores en sus objetos mientras pasa sobre ellos.

1

establezca el punto de interrupción en el conjunto de datos/datatable (tecla de acceso rápido f9 para punto de interrupción) y ejecute su aplicación (f5 es la tecla de acceso directo) Cuando el punto de interrupción viene mouse sitúe el dataset/datatable haga clic en el cristal imagen en el estudio visual.

Nota: check compilation debug = "true" es verdadero en la configuración web. El estudio visual no se aplicará para la depuración.

0
/// <summary> 
    /// Dumps the passed DataSet obj for debugging as list of html tables 
    /// </summary> 
    /// <param name="msg"> the msg attached </param> 
    /// <param name="ds"> the DataSet object passed for Dumping </param> 
    /// <returns> the nice looking dump of the DataSet obj in html format</returns> 
    public static string DumpHtmlDs(string msg, ref System.Data.DataSet ds) 
    { 
     StringBuilder objStringBuilder = new StringBuilder(); 
     objStringBuilder.AppendLine("<html><body>"); 

     if (ds == null) 
     { 
      objStringBuilder.AppendLine("Null dataset passed "); 
      objStringBuilder.AppendLine("</html></body>"); 
      WriteIf(objStringBuilder.ToString()); 
      return objStringBuilder.ToString(); 
     } 

     objStringBuilder.AppendLine("<p>" + msg + " START </p>"); 
     if (ds != null) 
     { 
      if (ds.Tables == null) 
      { 
       objStringBuilder.AppendLine("ds.Tables == null "); 
       return objStringBuilder.ToString(); 
      } 


      foreach (System.Data.DataTable dt in ds.Tables) 
      { 

       if (dt == null) 
       { 
        objStringBuilder.AppendLine("ds.Tables == null "); 
        continue; 
       } 
       objStringBuilder.AppendLine("<table>"); 

       //objStringBuilder.AppendLine("================= My TableName is " + 
       //dt.TableName + " ========================= START"); 
       int colNumberInRow = 0; 
       objStringBuilder.Append("<tr><th>row number</th>"); 
       foreach (System.Data.DataColumn dc in dt.Columns) 
       { 
        if (dc == null) 
        { 
         objStringBuilder.AppendLine("DataColumn is null "); 
         continue; 
        } 


        objStringBuilder.Append(" <th> |" + colNumberInRow.ToString() + " | "); 
        objStringBuilder.Append( dc.ColumnName.ToString() + " </th> "); 
        colNumberInRow++; 
       } //eof foreach (DataColumn dc in dt.Columns) 
       objStringBuilder.Append("</tr>"); 

       int rowNum = 0; 
       foreach (System.Data.DataRow dr in dt.Rows) 
       { 
        objStringBuilder.Append("<tr><td> row - | " + rowNum.ToString() + " | </td>"); 
        int colNumber = 0; 
        foreach (System.Data.DataColumn dc in dt.Columns) 
        { 
         objStringBuilder.Append(" <td> |" + colNumber + "|"); 
         objStringBuilder.Append(dr[dc].ToString() + " </td>"); 
         colNumber++; 
        } //eof foreach (DataColumn dc in dt.Columns) 
        rowNum++; 
        objStringBuilder.AppendLine(" </tr>"); 
       } //eof foreach (DataRow dr in dt.Rows) 

       objStringBuilder.AppendLine("</table>"); 
       objStringBuilder.AppendLine("<p>" + msg + " END </p>"); 
      } //eof foreach (DataTable dt in ds.Tables) 

     } //eof if ds !=null 
     else 
     { 

      objStringBuilder.AppendLine("NULL DataSet object passed for debugging !!!"); 
     } 
     return objStringBuilder.ToString(); 

    } 
+0

¿Qué es writeif? WriteIf (objStringBuilder.ToString()); – Kiquenet

Cuestiones relacionadas