如何在debugging时查看DataTable
我刚刚开始使用ADO.NET和DataSets和DataTables。 我遇到的一个问题是,在尝试debugging时,很难判断数据表中有什么值。
快速查看DataTable中保存的值的最简单方法是什么? 有没有方法在debugging时在Visual Studio中查看内容,或者是将数据写入文件的唯一选项?
我创build了一个小工具函数,将一个DataTable写入一个CSV文件。 然而,由此产生的CSV文件被切断。 在写出System.Guid的过程中最后一行应该是大概3行,文件就停止了。 我不知道这是否是我的CSV转换方法,或DataTable的原始人口的问题。
更新
忘记最后一部分,我忘了冲洗我的stream写作。
在设置了断点之后,填充DataTable或DataSet之后,如果将鼠标hover在variables上,则可以看到放大镜。 如果你点击它,它会调出DataTable Visualizer,你可以在这里阅读。
在下面的图像中,dt是我的DataTablevariables,断点位于下面几行,允许我将鼠标hover在该值上。 使用Visual Studio 2008。
DataTable Visualizer ( image credit ):
我在以最外层类命名的类中添加了两行代码到我的应用程序中:
public MyClass() { // The following (2) lines are used for testing only. Remove comments to debug. System.Diagnostics.Debugger.Launch(); System.Diagnostics.Debugger.Break(); }
这应该停止应用程序,并在debugging模式下。 然后,您可以逐步浏览它,并在鼠标hover在对象上时查看对象中的值。
在数据集/数据表中设置断点(f9断点快捷键)并运行你的应用程序(f5是快捷键)当鼠标hover的时候,数据集/数据表单击在视觉工作室的hover图像。
注意:在webconfiguration中检查编译debug =“true”是否为真。否则Visual Studio不会去debugging。
/// <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(); }