77 votes

Comment afficher un DataTable pendant le débogage

Je suis juste de commencer à l'aide de ADO.NET et des ensembles de données et les tables de données. Un problème que je vais avoir est, il semble assez difficile de dire quelles sont les valeurs qui sont dans la table de données lorsque vous essayez de déboguer.

Quelles sont certaines des façons les plus faciles de rapidement voir ce que les valeurs ont été enregistrés dans un DataTable? Est-il d'une certaine manière de voir le contenu dans Visual Studio, tandis que le débogage ou est la seule option pour écrire les données dans un fichier?

J'ai créé une petite fonction utilitaire qui va écrire une Table de données vers un fichier CSV. Pourtant, le résultant fichier CSV créé a été coupée. Sur les 3 lignes de ce qui devrait être la dernière ligne dans le milieu de l'écriture d'un Système.Guid du fichier s'arrête juste. Je ne peux pas dire si c'est un problème avec mon CSV méthode de conversion, ou l'original de la population de la DataTable.

Mise à jour

Oubliez la dernière partie j'ai juste oublié de vider mon flux de l'écrivain.

185voto

RSolberg Points 17001

Avec un point de rupture de l'ensemble, après la DataTable ou le jeu de données est remplie, vous pouvez voir une loupe si vous passez la souris sur la variable. Si vous cliquez dessus, il va faire apparaître la DataTable Visualizer, que vous pouvez lire ici.

Dans cette image que vous voyez ci-dessous, dt est ma DataTable variable et le point d'arrêt a été frappé quelques lignes ci-dessous en me permettant de planer au-dessus de cette valeur. À L'Aide De Visual Studio 2008.

alt text

DataTable Visualizer (crédit image):
alt text

1voto

pave Points 334

J'ai ajouté deux lignes dans mon application dans une classe nommée d'après la classe la plus externe:

 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 l'amener en mode débogage. Ensuite, vous pouvez y accéder et examiner les valeurs de vos objets lorsque vous les survolez.

1voto

anishMarokey Points 6895

définissez le point de rupture sur le jeu de données / datatable (touche de raccourci f9 pour le point de rupture) et exécutez votre application (f5 est le raccourci clavier) Lorsque le point de rupture arrive, passez la souris sur le jeu de données / cliquez sur la vitre affichée dans l'image survolée dans visual studio .

Remarque: vérifiez que la compilation debug = "true" est vraie dans la configuration Web .Else visual studio ne sera pas utilisé pour le 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: