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


81

ADO.NETとDataSetsおよびDataTablesの使用を始めたばかりです。私が抱えている問題の1つは、デバッグしようとしたときにデータテーブルにどの値があるかを判断するのがかなり難しいように思われることです。

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

DataTableをCSVファイルに書き出す小さなユーティリティ関数を作成しました。それでも、作成された結果のCSVファイルは切り捨てられました。System.Guidを書き出す途中の最後の行から約3行で、ファイルが停止します。これが私のCSV変換方法の問題なのか、それともDataTableの元の母集団の問題なのかわかりません。

更新

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

回答:


198

ブレークポイントを設定すると、DataTableまたはDataSetにデータが入力された後、変数にカーソルを合わせると虫眼鏡が表示されます。それをクリックすると、DataTableビジュアライザーが表示されます。これについてはこちらをご覧ください

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

代替テキスト

DataTable Visualizer画像クレジット):
代替テキスト


5
これを見ずにどうやってこんなに長くなったのかわからない!あなたは彼らがその小さな小さな虫眼鏡のアイコンをもう少し明白にするだろうと思うでしょう!
ジェイソン

2
同意する。いったいどうして私はこれを逃したのですか?VSは最初に発売されてから使っています。この機能はいつ追加されましたか?
ザス。

いい答えだ!唯一の問題は、ビジュアライザーが行番号を表示しないことです。特定の行の値を確認する必要がある場合、どうすればよいですか?
AllSolutions 2016

2

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

注:コンパイルを確認してくださいdebug = "true"は、Web構成でtrueです。


1

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

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 2011
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.