web-dev-qa-db-ja.com

デバッグ中にDataTableを表示する方法

ADO.NETとDataSetsおよびDataTablesを使い始めたばかりです。私が抱えている問題の1つは、デバッグを試みるときにデータテーブルに含まれている値を特定するのがかなり難しいように見えることです。

DataTableに保存されている値をすばやく確認する最も簡単な方法は何ですか?デバッグ中にVisual Studioのコンテンツを表示する方法はありますか、データをファイルに書き込む唯一のオプションですか?

DataTableをCSVファイルに書き込む小さなユーティリティ関数を作成しました。それでも、作成されたCSVファイルは作成されませんでした。 System.Guidの書き込み中の最後の行であるべきところから約3行で、ファイルが停止します。これがCSV変換方法の問題なのか、DataTableの元の人口なのかわかりません。

更新

ストリームライターをフラッシュするのを忘れた最後の部分を忘れてください。

77
Eric Anastas

ブレークポイントを設定すると、DataTableまたはDataSetにデータが入力された後、変数にカーソルを合わせると虫眼鏡が表示されます。クリックすると、DataTable Visualizerが表示されます。これについては、 here について読むことができます。

以下に示すこの画像では、dtはDataTable変数であり、ブレークポイントは数行下でヒットしたため、この値にカーソルを合わせることができます。 Visual Studio 2008を使用します。

alt text

DataTable Visualizer(- 画像クレジット ):
alt text

185
RSolberg

最も外側のクラスにちなんで名付けられたクラス内のアプリに2行追加しました。

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

これにより、アプリが停止し、デバッグモードで起動します。次に、それをステップスルーして、オブジェクトにカーソルを合わせてオブジェクトの値を確認します。

1
pave

データセット/データテーブルにブレークポイントを設定し(ブレークポイントのf9ショートカットキー)、アプリケーションを実行します(f5はショートカットキーです)ブレークポイントが来たら、マウスをデータセット/データテーブルにホバーし、Visual Studioのホバー画像に表示されているガラスをクリックします。

注:コンパイルのチェックdebug = "true"がweb configでtrueである。Elsevisual studioはデバッグに行かない。

1
anishMarokey
    /// <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();

    } 
0
Yordan Georgiev