Jak wyświetlić DataTable podczas debugowania

81

Dopiero zaczynam korzystać z ADO.NET oraz DataSets i DataTables. Jednym z problemów, które mam, jest to, że wydaje się dość trudne do określenia wartości w tabeli danych podczas próby debugowania.

Jakie są najłatwiejsze sposoby szybkiego sprawdzenia, jakie wartości zostały zapisane w DataTable? Czy istnieje sposób, aby wyświetlić zawartość w programie Visual Studio podczas debugowania, czy jest to jedyna opcja zapisania danych do pliku?

Stworzyłem małą funkcję narzędzia, która zapisze DataTable do pliku CSV. Jednak utworzony wynikowy plik CSV został odcięty. Około 3 linie od tego, co powinno być ostatnią linią w środku pisania System.Guid, plik po prostu się zatrzymuje. Nie mogę stwierdzić, czy jest to problem z moją metodą konwersji CSV, czy z pierwotną populacją DataTable.

Aktualizacja

Zapomnij o ostatniej części, o której właśnie zapomniałem opróżnić program do zapisywania strumieni.

Eric Anastas
źródło

Odpowiedzi:

198

Po ustawieniu punktu przerwania po wypełnieniu DataTable lub DataSet możesz zobaczyć lupę po umieszczeniu wskaźnika myszy nad zmienną. Jeśli go klikniesz, wyświetli się DataTable Visualizer, o którym możesz przeczytać tutaj .

Na tym obrazku, który widzisz poniżej, dt jest moją zmienną DataTable, a punkt przerwania został osiągnięty kilka wierszy poniżej, co pozwoliło mi najechać kursorem na tę wartość. Korzystanie z programu Visual Studio 2008.

tekst alternatywny

DataTable Visualizer ( źródło obrazu ):
tekst alternatywny

RSolberg
źródło
5
Nie wiem, jak długo to trwało, nie sprawdzając tego! Można by pomyśleć, że sprawią, że ta malutka ikona lupy będzie trochę bardziej oczywista!
Jason
2
Zgadzam się. Jak u licha to przegapiłem? Używam VS odkąd się pojawił. Kiedy dodano tę funkcję?
Zath.
Niezła odpowiedź! Jedynym problemem jest to, że wizualizator nie wyświetla numerów wierszy. Jeśli muszę sprawdzić wartości w określonym wierszu, jak mogę to zrobić?
AllSolutions
2

ustaw punkt przerwania w zbiorze danych / datatable (klawisz skrótu F9 dla punktu przerwania) i uruchom aplikację (f5 to skrót klawiszowy) Gdy pojawi się punkt przerwania, najedź myszą na zbiór danych / datatable kliknij na szkle pokazanym na obrazku po aktywowaniu w Visual Studio .

Uwaga: check compilation debug = "true" jest prawdą w konfiguracji sieciowej. Visual Studio nie przejdzie do debugowania.

anishMarokey
źródło
1

Dodałem dwa wiersze do mojej aplikacji wewnątrz klasy nazwanej na podstawie najbardziej zewnętrznej klasy:

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

Powinno to zatrzymać aplikację i uruchomić ją w trybie debugowania. Następnie możesz przejść przez to i spojrzeć na wartości w swoich obiektach, gdy najedziesz na nie kursorem.

wybrukować
źródło
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
źródło
co to jest writeif ?? WriteIf (objStringBuilder.ToString ());
Kiquenet