ADO.NETとDataSetsおよびDataTablesを使い始めたばかりです。私が抱えている問題の1つは、デバッグを試みるときにデータテーブルに含まれている値を特定するのがかなり難しいように見えることです。
DataTableに保存されている値をすばやく確認する最も簡単な方法は何ですか?デバッグ中にVisual Studioのコンテンツを表示する方法はありますか、データをファイルに書き込む唯一のオプションですか?
DataTableをCSVファイルに書き込む小さなユーティリティ関数を作成しました。それでも、作成されたCSVファイルは作成されませんでした。 System.Guidの書き込み中の最後の行であるべきところから約3行で、ファイルが停止します。これがCSV変換方法の問題なのか、DataTableの元の人口なのかわかりません。
更新
ストリームライターをフラッシュするのを忘れた最後の部分を忘れてください。
最も外側のクラスにちなんで名付けられたクラス内のアプリに2行追加しました。
public MyClass()
{
// The following (2) lines are used for testing only. Remove comments to debug.
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
}
これにより、アプリが停止し、デバッグモードで起動します。次に、それをステップスルーして、オブジェクトにカーソルを合わせてオブジェクトの値を確認します。
データセット/データテーブルにブレークポイントを設定し(ブレークポイントのf9ショートカットキー)、アプリケーションを実行します(f5はショートカットキーです)ブレークポイントが来たら、マウスをデータセット/データテーブルにホバーし、Visual Studioのホバー画像に表示されているガラスをクリックします。
注:コンパイルのチェックdebug = "true"がweb configでtrueである。Elsevisual studioはデバッグに行かない。
/// <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();
}