So zeigen Sie eine DataTable beim Debuggen an


80

Ich fange gerade erst mit ADO.NET, DataSets und DataTables an. Ein Problem, das ich habe, ist, dass es ziemlich schwierig zu sagen scheint, welche Werte in der Datentabelle enthalten sind, wenn versucht wird, Fehler zu beheben.

Was sind einige der einfachsten Methoden, um schnell zu sehen, welche Werte in einer DataTable gespeichert wurden? Gibt es eine Möglichkeit, den Inhalt in Visual Studio während des Debuggens anzuzeigen, oder ist die einzige Option, die Daten in eine Datei zu schreiben?

Ich habe ein kleines Dienstprogramm erstellt, mit dem eine Datentabelle in eine CSV-Datei geschrieben wird. Die resultierende CSV-Datei wurde jedoch abgeschnitten. Ungefähr 3 Zeilen von der letzten Zeile in der Mitte des Schreibens eines System.Guid die Datei stoppt einfach. Ich kann nicht feststellen, ob dies ein Problem mit meiner CSV-Konvertierungsmethode oder der ursprünglichen Grundgesamtheit der DataTable ist.

Aktualisieren

Vergiss den letzten Teil, den ich gerade vergessen habe, meinen Streamwriter zu leeren.

Antworten:


196

Wenn ein Haltepunkt festgelegt ist, können Sie nach dem Auffüllen der DataTable oder des DataSet eine Lupe sehen, wenn Sie den Mauszeiger über die Variable bewegen. Wenn Sie darauf klicken, wird der DataTable Visualizer angezeigt, über den Sie hier lesen können .

In diesem Bild unten ist dt meine DataTable-Variable, und der Haltepunkt wurde einige Zeilen weiter unten erreicht, sodass ich mit der Maus über diesen Wert fahren kann. Verwenden von Visual Studio 2008.

Alt-Text

DataTable Visualizer ( Bildnachweis ):
Alt-Text


5
Ich weiß nicht, wie ich so lange gegangen bin, ohne das nachzuschlagen! Sie würden denken, sie würden diese winzige Lupensymbol etwas offensichtlicher machen!
Jason

2
Genau. Wie um alles in der Welt habe ich das vermisst? Ich benutze VS seit dem ersten Erscheinen. Wann wurde diese Funktion hinzugefügt?
Zath.

Gute Antwort! Das einzige Problem ist, dass der Visualizer die Zeilennummern nicht anzeigt. Wie kann ich das tun, wenn ich Werte in einer bestimmten Zeile überprüfen muss?
AllSolutions

1

Ich habe meiner App innerhalb einer Klasse, die nach der äußersten Klasse benannt ist, zwei Zeilen hinzugefügt:

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

Dies sollte die App stoppen und im Debug-Modus aufrufen. Dann können Sie es durchgehen und die Werte in Ihren Objekten betrachten, während Sie mit der Maus darüber fahren.


1

Legen Sie den Haltepunkt für das Dataset / die Datentabelle fest (Tastenkombination f9 für den Haltepunkt) und führen Sie Ihre Anwendung aus (f5 ist die Tastenkombination) .

Hinweis: Überprüfen Sie, ob die Kompilierung debug = "true" in der Webkonfiguration wahr ist. Andernfalls wird Visual Studio nicht zum Debuggen verwendet.


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

    } 

was ist es schreiben? WriteIf (objStringBuilder.ToString ());
Kiquenet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.