Як переглянути таблицю даних під час налагодження


81

Я тільки починаю використовувати ADO.NET та DataSets та DataTables. У мене одна проблема - здається, досить важко сказати, які значення містяться в таблиці даних при спробі налагодження.

Які найпростіші способи швидко побачити, які значення були збережені в таблиці даних? Чи є спосіб побачити вміст у Visual Studio під час налагодження чи є єдиним варіантом записати дані у файл?

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

Оновлення

Забудьте про останню частину, яку я просто забув змити зі свого письменника.

Відповіді:


198

Якщо встановлено точку розриву, після заповнення DataTable або DataSet ви можете побачити збільшувальне скло, якщо навести курсор на змінну. Якщо натиснути на нього, він відкриє візуалізатор DataTable, про який ви можете прочитати тут .

На цьому зображенні, яке ви бачите нижче, dt - це моя змінна DataTable, і точка зупинку потрапила на кілька рядків нижче, що дозволяє мені навести курсор на це значення. Використання Visual Studio 2008.

текст заміщення

Візуалізатор таблиці даних ( кредит зображення ):
текст заміщення


5
Я не знаю, як я пройшов так довго, не дивлячись на це! Можна подумати, що вони зроблять цю крихітну крихітну іконку лупи трохи більш очевидною!
Джейсон

2
Я згоден. Як у світі я скучив за цим? Я використовую VS з моменту його першого виходу. Коли було додано цю функцію?
Зат.

Приємна відповідь! Єдина проблема полягає в тому, що Visualizer не відображає номери рядків. Якщо мені потрібно перевірити значення в певному рядку, як я можу це зробити?
AllSolutions

2

встановіть точку розриву на наборі даних / таблиці даних (клавіша скорочення клавіші f9 для точки розриву) та запустіть програму (f5 - це ярлик) Коли точка перерви з’являється, мишею наведіть набір даних / таблицю даних, клацніть на склі, показаному на зображенні наведення в Visual Studio .

Примітка: перевірте компіляцію debug = "true" є true у веб-конфігурації. Else visual studio не піде на налагодження.


1

Я додав два рядки у свій додаток у класі, названому на честь самого зовнішнього класу:

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

Це має зупинити програму та вивести її в режим налагодження. Потім ви можете перейти через нього і подивитися на значення у ваших об’єктах, коли ви наводите на них курсор.


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

    } 

що це таке writeif ?? WriteIf (objStringBuilder.ToString ());
Кікенет,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.