2009-08-26 7 views
70

Sto iniziando a utilizzare ADO.NET e DataSet e DataTable. Un problema che sto riscontrando è che sembra piuttosto difficile dire quali sono i valori nella tabella dati quando si tenta di eseguire il debug.Come visualizzare un DataTable durante il debug

Quali sono alcuni dei modi più semplici per vedere rapidamente quali valori sono stati salvati in un DataTable? C'è qualche modo per vedere i contenuti in Visual Studio durante il debug o è l'unica opzione per scrivere i dati in un file?

Ho creato una piccola funzione di utilità che scriverà un DataTable in un file CSV. Eppure il file CSV risultante creato è stato interrotto. Circa 3 righe da quella che avrebbe dovuto essere l'ultima riga nel mezzo della scrittura di un System.Guid il file si ferma. Non riesco a capire se si tratta di un problema con il mio metodo di conversione CSV o della popolazione originale di DataTable.

Aggiornamento

Dimenticate l'ultima parte ho solo dimenticato di svuotare il mio flusso di scrittore.

risposta

169

Con un set di punti di interruzione, dopo che il DataTable o il DataSet è stato compilato, è possibile vedere una lente di ingrandimento se si passa con il mouse sopra la variabile. Se si fa clic su di esso, verrà visualizzato il Visualizzatore DataTable, che è possibile leggere su here.

In questa immagine si vede sotto, dt è la mia variabile DataTable e il punto di interruzione è stato colpito poche righe sotto che mi permette di passare con il mouse su questo valore. Utilizzando Visual Studio 2008.

alt text

DataTable Visualizer (image credit):
alt text

+3

Oh uomo non posso credere che mi sia mancato. Grazie! –

+0

bel lavoro Rsolberg. Un voto da parte mia !!! – anishMarokey

+17

OMFG, COME HO FATTO QUESTO !!!! AAAARRRGHGHGHGHGHGHG, TANTO MOLTO TEMPO SCARICATO A BANDI A DATATABLES A RUNTIME SOLO PER FARE QUESTO !!! – Pierreten

1

ho aggiunto due righe in mia app all'interno di una classe denominata dopo la classe più esterno:

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

Questo dovrebbe interrompere l'applicazione e portarlo in modalità di debug. Quindi puoi attraversarlo e guardare i valori nei tuoi oggetti mentre ti passi sopra di essi.

1

impostare il punto di interruzione sul dataset/datatable (tasto di scelta rapida f9 per punto di interruzione) ed eseguire l'applicazione (f5 è il tasto di scelta rapida) Quando il punto di interruzione arriva il mouse al passaggio del mouse sul dataset/datatable fare clic sul vetro mostrato nel hover immagine in studio visivo.

Nota: controllare la compilazione debug = "true" è true in web config .Else Visual Studio non esegue il debug.

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

cosa si scrive? WriteIf (objStringBuilder.ToString()); – Kiquenet