디버깅하는 동안 DataTable을 보는 방법


81

ADO.NET과 DataSets 및 DataTables를 사용하기 시작했습니다. 내가 가진 한 가지 문제는 디버깅을 시도 할 때 데이터 테이블에 어떤 값이 있는지 말하기가 매우 어렵다는 것입니다.

DataTable에 저장된 값을 빠르게 확인할 수있는 가장 쉬운 방법은 무엇입니까? 디버깅하는 동안 Visual Studio에서 콘텐츠를 볼 수있는 방법이 있습니까? 아니면 파일에 데이터를 쓰는 유일한 옵션입니까?

DataTable을 CSV 파일에 쓰는 작은 유틸리티 함수를 만들었습니다. 그러나 생성 된 CSV 파일은 잘 렸습니다. System.Guid를 작성하는 동안 마지막 줄이되어야하는 줄에서 약 3 줄이 지나면 파일이 중지됩니다. 이것이 내 CSV 변환 방법에 문제가 있는지 아니면 DataTable의 원래 채우기에 문제가 있는지 알 수 없습니다.

최신 정보

스트림 작성자를 플러시하는 것을 잊은 마지막 부분은 잊어 버려.

답변:


197

중단 점이 설정된 경우 DataTable 또는 DataSet이 채워진 후 변수 위에 마우스를 올려 놓으면 돋보기가 표시됩니다. 클릭하면 DataTable Visualizer가 나타나며 여기에서 읽을 수 있습니다 .

아래 이미지에서 dt는 내 DataTable 변수이고 중단 점은이 값 위로 마우스를 가져갈 수 있도록 몇 줄 아래에 있습니다. Visual Studio 2008 사용.

대체 텍스트

DataTable Visualizer ( 이미지 크레딧 ) :
대체 텍스트


5
이걸 보지 않고 어떻게 그렇게 오래 갔는지 모르겠어요! 당신은 그들이 그 아주 작은 돋보기 아이콘을 조금 더 분명하게 만들 것이라고 생각할 것입니다!
Jason

2
나는 동의한다. 어떻게 내가 이것을 놓쳤습니까? VS가 처음 나온 이후부터 사용하고 있습니다. 이 기능이 언제 추가 되었습니까?
Zath.

좋은 대답입니다! 유일한 문제는 Visualizer가 행 번호를 표시하지 않는다는 것입니다. 특정 행의 값을 확인해야하는 경우 어떻게해야합니까?
AllSolutions 2016-09-26

2

데이터 세트 / 데이터 테이블에 중단 점을 설정하고 (중단 점에 대한 f9 바로 가기 키) 애플리케이션을 실행합니다 (f5는 바로 가기 키입니다). 중단 점이 오면 데이터 세트 / 데이터 테이블을 마우스로 가리키면 Visual Studio의 마우스 오버 이미지에 표시된 유리를 클릭합니다. .

참고 : 웹 구성에서 컴파일 debug = "true"가 true인지 확인하십시오. 그렇지 않으면 Visual Studio가 디버깅에 사용되지 않습니다.


1

가장 바깥 쪽 클래스의 이름을 딴 클래스 안에 두 줄을 내 앱에 추가했습니다.

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.