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


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

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

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

обновление

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

4 73

4 ответа:

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

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

alt text

DataTable Визуализатор (кредитного изображения):
alt text

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

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

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

установите точку останова на dataset / datatable (клавиша быстрого доступа f9 для точки останова) и запустите приложение (F5-это shortcutkey ) когда точка останова приходит наведите курсор мыши на dataset/datatable нажмите на стекло, показанное на изображении наведения в visual studio .

Примечание: проверка компиляции debug= "true" является true в веб-конфигурации .Иначе visual studio не пойдет на отладку .

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

    }