Как просматривать DataTable во время отладки

Я только начинаю использовать ADO.NET и DataSet и DataTables. Одна из проблем, с которой я сталкиваюсь, довольно сложно сказать, какие значения находятся в таблице данных при попытке отладки.

Каковы некоторые из самых простых способов быстро увидеть, какие значения были сохранены в DataTable? Можно ли увидеть содержимое в Visual Studio во время отладки или единственный способ записать данные в файл?

Я создал небольшую функцию утилиты, которая будет записывать DataTable в CSV файл. Однако результирующий CSV файл был отключен. Около 3 строк из того, что должно было быть последней строкой в ​​середине написания файла System.Guid, просто останавливается. Я не могу сказать, является ли это проблемой для моего метода преобразования CSV или исходной совокупности DataTable.

Обновление

Забудьте о последней части, которую я просто забыл очистить писателя потока.

Ответ 1

С набором точек останова после заполнения DataTable или DataSet вы можете видеть увеличительное стекло, если вы наводите курсор на переменную. Если вы нажмете на него, он отобразит документ-документ DataTable, который вы можете прочитать здесь здесь.

На этом изображении вы видите ниже, dt - это моя переменная DataTable, и точка останова была поражена несколькими строками ниже, что позволяет мне нависнуть над этим значением. Использование Visual Studio 2008.

alt text

DataTable Visualizer (образ кредита):
alt text

Ответ 2

Я добавил две строки в мое приложение внутри класса, названного в честь самого внешнего класса:

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

Это должно остановить приложение и привести его в режим отладки. Затем вы можете пройти через него и посмотреть на значения в своих объектах, когда вы наведете их над ними.

Ответ 3

установить точку останова в наборе данных /datatable (клавиша быстрого вызова f9 для точки останова) и запустить ваше приложение (f5 - клавиша быстрого вызова). Когда точка разрыва наводится наведите курсор мыши на набор данных /datatable, нажмите на стекло, показанное на изображении наведения в визуальной студии.

Примечание: проверка компиляции debug = "true" является истиной в веб-конфигурации. Дополнительная визуальная студия не хочет отлаживать.

Ответ 4

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

    }