Cómo ver un DataTable durante la depuración

81

Recién estoy comenzando a usar ADO.NET y DataSets y DataTables. Un problema que tengo es que parece bastante difícil saber qué valores hay en la tabla de datos al intentar depurar.

¿Cuáles son algunas de las formas más fáciles de ver rápidamente qué valores se han guardado en un DataTable? ¿Hay alguna forma de ver el contenido 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á un DataTable en un archivo CSV. Sin embargo, el archivo CSV resultante creado se cortó. Aproximadamente 3 líneas de lo que debería haber sido la última línea en medio de escribir un System.Guid el archivo simplemente se detiene. No puedo decir si esto es un problema con mi método de conversión CSV o la población original de DataTable.

Actualizar

Olvídese de la última parte. Olvidé vaciar mi escritor de transmisiones.

Eric Anastas
fuente

Respuestas:

197

Con un punto de interrupción establecido, después de que se llena el DataTable o el DataSet, puede ver una lupa si se desplaza sobre la variable. Si hace clic en él, aparecerá el visualizador DataTable, sobre el que puede leer aquí .

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

texto alternativo

Visualizador DataTable ( crédito de imagen ):
texto alternativo

RSolberg
fuente
5
¡No sé cómo pasé tanto tiempo sin buscar esto! ¡Pensarías que harían que ese ícono de lupa diminuto sea un poco más obvio!
Jason
2
Estoy de acuerdo. ¿Cómo demonios me perdí esto? He estado usando VS desde que salió por primera vez. ¿Cuándo se agregó esta función?
Zath.
¡Buena respuesta! El único problema es que el Visualizador no muestra los números de fila. Si necesito verificar los valores en una fila en particular, ¿cómo puedo hacerlo?
AllSolutions
2

establezca el punto de interrupción en el conjunto de datos / tabla de datos (tecla de acceso directo f9 para el punto de interrupción) y ejecute su aplicación (f5 es la tecla de acceso directo) Cuando llegue el punto de interrupción, coloque el mouse sobre el conjunto de datos / tabla de datos haga clic en el cristal que se muestra en la imagen flotante en Visual Studio .

Nota: compruebe que la compilación debug = "true" sea true en la configuración web. De lo contrario, Visual Studio no irá a depurar.

anishMarokey
fuente
1

Agregué dos líneas a mi aplicación dentro de una clase que 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 recorrerlo y mirar los valores en sus objetos mientras pasa el mouse sobre ellos.

pavimentar
fuente
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();

    } 
Yordan Georgiev
fuente
que es escribir si ?? WriteIf (objStringBuilder.ToString ());
Kiquenet