2013-01-31 2 views
0
try 
     { 
      String empid1 = Request.QueryString["MyText"]; 

      int empid = int.Parse(empid1); 
      string constr = System.Configuration.ConfigurationManager.ConnectionStrings["EmployeeDatabase"].ConnectionString; 
      SqlConnection con = new SqlConnection(constr); 
      con.Open(); 
      SqlCommand cmd = new SqlCommand("ReportingManagers", con); 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.Add("@EmpID", SqlDbType.Int, 0).Value = empid; 

      SqlDataReader dr = cmd.ExecuteReader(); 
      dr.Read(); 
      LinkButton3.Text = string.Empty; 
      int i = 1; 
      while(dr.Read()) 
      { 


       TreeNode parentNode = new TreeNode("L" + i++ + "Manager : " + dr["Emp_Name"].ToString()); 
       parentNode.Value = dr["Emp_ID"].ToString(); 
       TreeView1.Nodes.Add(parentNode); 
       parentNode.ChildNodes.Add(new TreeNode("Short ID : " + dr["Short_ID"].ToString())); 
       parentNode.ChildNodes.Add(new TreeNode("EmpID : " + dr["Emp_ID"].ToString())); 
       // LinkButton3.Text = "Reporting Managers"; 
      } 

      DataTable dt = new DataTable(); 
      dt.Load(dr); 
      if (dt.Rows.Count > 1) 
      { 
       LinkButton3.Text = "Reporting Managers"; 
      } 

      dr.Close(); 
      con.Close(); 
     } 

위의 코드에서 if 루프가 실행되지 않는 이유를 설명해주십시오. 나는 datatable dt에서 행 수가 '0'인 것을 볼 수 있지만, 내 닥터가 실제로 행을 표시하고있다. 나는이 scenerio에서 SQL 어댑터를 사용하지 않는다.Datareader가 데이터 테이블에로드 할 때 행이 있습니다. 행 수가 0이됩니다.

이 시나리오에서 데이터 테이블의 행 수를 어떻게 잡을 수 있습니까?

답변

0

데이터 끝에 이미 사용 된 데이터 보관함으로 데이터 테이블을로드 할 수 없습니다.
한 번 루프 동안을에서 읽은 후이 방법

SqlDataReader dr = cmd.ExecuteReader(); 
LinkButton3.Text = string.Empty; 
int i = 1; 
DataTable dt = new DataTable(); 
dt.Load(dr); 
if (dt.Rows.Count > 1) 
{ 
    LinkButton3.Text = "Reporting Managers"; 
    foreach(DataRow r in dt.Rows) 
    { 
     TreeNode parentNode = new TreeNode("L" + i++ + "Manager : " + r["Emp_Name"].ToString()); 
     parentNode.Value = r["Emp_ID"].ToString(); 
     TreeView1.Nodes.Add(parentNode); 
     parentNode.ChildNodes.Add(new TreeNode("Short ID : " + r["Short_ID"].ToString())); 
     parentNode.ChildNodes.Add(new TreeNode("EmpID : " + r["Emp_ID"].ToString())); 
    } 
} 
+0

고맙습니다 ... 나는 논리를 가지고 있습니다. – user1912987

0

독자가 독자를 이미 TreeNode 구조체에로드 할 때 (전체 판독기를 읽는 while 루프) 이미 읽었으므로. DataReader는 앞으로 만 사용할 수 있으므로 독자는 '재설정'할 수도 없습니다.

+0

이 데이터 테이블에 독자를로드 할 수 없습니다 나는 같은 것입니다 귀하의 코드 실행의 순서를 변경하려고 ?? – user1912987

+0

네, 그건 제가 말하는 말입니다. 일단 읽으면 다시 돌아갈 수 없습니다. –

관련 문제