调试时如何查看数据表


81

我刚刚开始使用ADO.NET,DataSet和DataTables。我遇到的一个问题是,在尝试调试时很难分辨数据表中的值。

快速查看数据表中已保存哪些值的最简单方法是什么?在调试时是否有办法在Visual Studio中查看内容,还是将数据写出到文件的唯一选择?

我创建了一个小的实用程序函数,该函数会将DataTable写出到CSV文件中。但是,创建的结果CSV文件已被切断。大约距离写出System.Guid的最后一行大约3行。文件只是停止。我无法确定这是我的CSV转换方法还是DataTable的原始填充问题。

更新资料

忘记我刚刚忘记刷新流编写器的最后一部分。

Answers:


197

设置断点后,在填充DataTable或DataSet之后,如果将鼠标悬停在变量上,就可以看到一个放大镜。如果单击它,它将弹出DataTable Visualizer,您可以在此处阅读。

在下图中,您可以看到dt是我的DataTable变量,并且在以下几行打断点,使我可以将鼠标悬停在该值上。使用Visual Studio 2008。

替代文字

DataTable Visualizer图片来源):
替代文字


5
不知道我怎么走这么久!您会认为它们会使该小放大镜图标变得更加明显!
杰森

2
我同意。我是怎么想念这个的?自从它问世以来,我一直在使用VS。何时添加此功能?
Zath。

好答案!唯一的问题是可视化工具不显示行号。如果我需要检查特定行中的值,该怎么做?
AllSolutions 16/09/26

2

在数据集/数据表上设置断点(f9是断点的快捷键)并运行您的应用程序(f5是快捷键)当断点到来时,将鼠标悬停在数据集/数据表上,单击在Visual Studio中悬停图像中显示的玻璃上。

注意:在Web配置中,检查编译debug =“ true”是否为true。否则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());
Kiquenet
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.