【问题标题】:How to view a DataTable while debugging调试时如何查看数据表
【发布时间】:2010-11-23 03:38:56
【问题描述】:

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

有哪些最简单的方法可以快速查看 DataTable 中保存了哪些值?是否有办法在调试时查看 Visual Studio 中的内容,或者是将数据写入文件的唯一选择?

我创建了一个小实用程序函数,可以将 DataTable 写入 CSV 文件。然而,生成的 CSV 文件被切断了。在写出 System.Guid 的过程中应该是最后一行的大约 3 行,文件就停止了。我不知道这是我的 CSV 转换方法的问题,还是 DataTable 的原始人口问题。

更新

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

【问题讨论】:

    标签: debugging ado.net csv datatable dataset


    【解决方案1】:

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

    在您在下面看到的这张图片中,dt 是我的 DataTable 变量,并且断点位于下面几行,允许我将鼠标悬停在该值上。使用 Visual Studio 2008。

    数据表可视化工具 (image credit):

    【讨论】:

    • 我不知道我是怎么跑了这么久没有查到这个的!你会认为他们会让那个很小的放大镜图标更明显一点!
    • 我同意。我怎么会错过这个?自从 VS 刚问世以来,我就一直在使用它。何时添加此功能?
    • 不错的答案!唯一的问题是 Visualizer 不显示行号。如果我需要检查特定行中的值,我该怎么做?
    【解决方案2】:

    在数据集/数据表上设置断点(f9 断点快捷键)并运行您的应用程序(f5 是快捷键)当断点出现时,鼠标悬停数据集/数据表单击悬停图像中显示的玻璃在视觉工作室。

    注意:在 web config 中检查编译 debug="true" 是否为真。否则 Visual Studio 不会进行调试。

    【讨论】:

      【解决方案3】:

      我在以最外层类命名的类中添加了两行代码:

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

      这应该会停止应用程序并使其进入调试模式。然后,您可以单步执行它并在将鼠标悬停在对象上时查看它们中的值。

      【讨论】:

        【解决方案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();
        
            } 
        

        【讨论】:

        • 写什么?? WriteIf(objStringBuilder.ToString());
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多