77 votes

Comment visualiser une DataTable pendant le débogage ?

Je commence à peine à utiliser ADO.NET et les DataSets et DataTables. L'un des problèmes que je rencontre est qu'il semble assez difficile de savoir quelles valeurs se trouvent dans la table de données lorsque j'essaie de déboguer.

Quels sont les moyens les plus simples de voir rapidement quelles valeurs ont été enregistrées dans une DataTable ? Existe-t-il un moyen de voir le contenu dans Visual Studio pendant le débogage ou la seule option est-elle d'écrire les données dans un fichier ?

J'ai créé une petite fonction utilitaire qui écrit un DataTable dans un fichier CSV. Pourtant, le fichier CSV résultant créé a été coupé. A environ 3 lignes de ce qui aurait dû être la dernière ligne, au milieu de l'écriture d'un System.Guid, le fichier s'arrête. Je ne peux pas dire si c'est un problème avec ma méthode de conversion CSV, ou la population originale de la DataTable.

Mise à jour

Oubliez la dernière partie, j'ai juste oublié de vider mon rédacteur de flux.

188voto

RSolberg Points 17001

Lorsqu'un point d'arrêt est défini, une fois que la DataTable ou le DataSet est rempli, vous pouvez voir une loupe si vous survolez la variable. Si vous cliquez dessus, vous verrez apparaître le DataTable Visualizer, que vous pouvez consulter à l'adresse suivante aquí .

Dans l'image que vous voyez ci-dessous, dt est ma variable DataTable et le point d'arrêt a été atteint quelques lignes plus bas, ce qui me permet de survoler cette valeur. En utilisant Visual Studio 2008.

alt text

DataTable Visualizer ( crédit d'image ) :
alt text

1voto

pave Points 334

J'ai ajouté deux lignes dans mon application à l'intérieur d'une classe nommée après la classe la plus extérieure :

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

Cela devrait arrêter l'application et la faire apparaître en mode débogage. Vous pouvez alors la parcourir et regarder les valeurs de vos objets lorsque vous les survolez.

1voto

anishMarokey Points 6895

Définissez le point d'arrêt sur le dataset/datable (touche de raccourci f9 pour le point d'arrêt) et exécutez votre application (f5 est la touche de raccourci) Lorsque le point d'arrêt arrive, survolez le dataset/datable en cliquant sur le verre montré dans l'image de survol dans Visual Studio.

Note : vérifiez que la compilation debug="true" est vraie dans la configuration web, sinon Visual Studio ne fera pas de débogage.

0voto

YordanGeorgiev Points 1222
    /// <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();

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X