web-dev-qa-db-fra.com

Comment afficher un DataTable pendant le débogage

Je commence tout juste à utiliser ADO.NET, DataSets et DataTables. Un problème que je rencontre est qu'il semble assez difficile de dire quelles valeurs sont dans la table de données lorsque vous essayez de déboguer.

Quels sont les moyens les plus faciles de voir rapidement quelles valeurs ont été enregistrées dans un DataTable? Existe-t-il un moyen de voir le contenu dans Visual Studio lors du débogage ou est-ce la seule option pour écrire les données dans un fichier?

J'ai créé une petite fonction utilitaire permettant d'écrire un DataTable dans un fichier CSV. Cependant, le fichier CSV créé a été coupé. 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 s'il s'agit d'un problème avec ma méthode de conversion CSV ou la population d'origine de DataTable.

Mettre à jour

Oubliez la dernière partie, j'ai juste oublié de débusquer mon auteur de flux.

73
Eric Anastas

Avec un point d'arrêt défini, une fois le DataTable ou le DataSet renseigné, vous pouvez voir une loupe si vous passez la souris sur la variable. Si vous cliquez dessus, le Visualiseur DataTable apparaîtra, que vous pouvez lire à propos de ici .

Dans cette image, vous voyez ci-dessous, dt est ma variable DataTable et le point d'arrêt a été touché quelques lignes plus bas, ce qui m'a permis de survoler cette valeur. Utilisation de Visual Studio 2008.

alt text

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

177
RSolberg

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.

1
pave

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 fenêtre visible 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.

1
anishMarokey
    /// <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
Yordan Georgiev