Как просматривать 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();
}