2009-08-26 14 views
70

私はちょうどADO.NETとDataSetsとDataTablesを使い始めています。私が抱えている問題の1つは、デバッグしようとしているときにデータテーブルにどのような値が入っているのかを知ることはかなり難しいようです。デバッグ中にDataTableを表示する方法

DataTableに保存されている値をすばやく確認する最も簡単な方法は何ですか。デバッグ中にVisual Studioの中身を見ることがありますか、またはデータをファイルに書き出す唯一のオプションですか?

DataTableをCSVファイルに書き出す小さなユーティリティ関数を作成しました。しかし、作成されたCSVファイルは途切れてしまいました。 System.Guidの書き出しの途中で最後の行になっていたはずの行から約3行分だけファイルが停止します。これが私のCSV変換方法やDataTableの元々の人口問題であるかどうかはわかりません。

更新

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

答えて

169

ブレークポイントが設定されている場合、DataTableまたはDataSetのデータが入力された後、変数の上にマウスを移動すると拡大鏡が表示されます。それをクリックすると、DataTable Visualizerが表示され、約hereを読むことができます。

この画像では、dtが私のDataTable変数であり、この値の上にマウスを置くことができる数点下にブレークポイントが当たっています。 Visual Studioを使用2008

alt text

DataTableのビジュアライザimage credit):
alt text

+3

私はそれを逃したとは思えません。ありがとう! –

+0

素敵な仕事Rsolberg。私からの投票をアップ! – anishMarokey

+17

OMFG、これはどうでしたか? AAAARRRGHGHGHGHGHGHG、あまりにも時間がかかるので、これを行うにはランタイムでデータにバインドする時間が浪費! – Pierreten

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(); 
    } 

これは、アプリケーションを停止し、デバッグモードで起動する必要があります。それから、あなたはそれを突き抜けてあなたのオブジェクトの値を見ることができます。

1

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

注:チェックコンパイルdebug = "true"はWeb設定でtrueです.Eudio Visual Studioはデバッグには向かないでしょう。

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(); 

    } 
+0

それは何ですか? WriteIf(objStringBuilder.ToString()); – Kiquenet

関連する問題