2013-07-06 1 views
0

SqlDataReader에 문제가 있습니다.C#의 SqlDataReader

여기 내 코드가 있습니다. 문제는 내가 그것을 디버깅 할 때 그것이 dr.Read()이 거짓에 의해 반환되는 값을 의미

while(dr.read()) 

보다 더하지 않는 것입니다. 나는 틀린 것을 모른다. 당신이 Card_reg 표는 데이터베이스에 정의하지만,이 표는 어떤 값을 포함하지 않는이 같은

if (CS_time_date[i].Substring(0, 2) == "CS") 
    { 
     string cardserial = CS_time_date[i].Substring(4, 5); 
     try 
     { 
      using (SqlConnection con = new SqlConnection(WindowsAppEmp.Properties.Settings.Default.Database1ConnectionString)) 
      { 
       con.Open(); 
       SqlCommand cmd = new SqlCommand("select * from Card_reg ", con); 
       using (SqlDataReader dr = cmd.ExecuteReader()) 
       { 
        while (dr.Read()) 
        { 
         if ((dr["Cardserial"].ToString() == cardserial)) 
         { 
          flag = 1; 
          string EmpID = dr["Id"].ToString(); 
          string F_Name = dr["fname"].ToString(); 
          string L_Name = dr["lname"].ToString(); 
          // Insert_EmpReport(EmpID, F_Name, L_Name, cardserial, CS_time_date,con); 
          string strsql1 = "Insert into Emp_Report (EmpId,CS,fname,lname,CheckIn,CheckOut,Date,Status) values (@EmpID,@Cs,@fname,@lname,@CheckIn,@CheckOut,@Date,@Status)"; 
          SqlCommand report_cmd = new SqlCommand(strsql1, con); 
          report_cmd.Parameters.AddWithValue("@EmpID", EmpID); 
          report_cmd.Parameters.AddWithValue("@Cs", cardserial); 
          report_cmd.Parameters.AddWithValue("@fname", F_Name); 
          report_cmd.Parameters.AddWithValue("@lname", L_Name); 
          if (CS_time_date[i].Substring(9, 10) == "56") 
           if (CS_time_date[i + 2] == DateTime.Now.ToString("dd/mm/yyyy")) 
           { 
            report_cmd.Parameters.AddWithValue("@CheckIn", CS_time_date[i + 1]); 
            report_cmd.Parameters.AddWithValue("@Status", "Present"); 
           } 

           else 
            report_cmd.Parameters.AddWithValue("@Status", "Absent"); 

          else 
           report_cmd.Parameters.AddWithValue("@CheckOut", CS_time_date[i + 1]); 

          report_cmd.Parameters.AddWithValue("@Date", CS_time_date[i + 2]); 


         } 
         else 
          flag = 0; 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
} while (reader.Peek() != -1); 

reader.Close(); 
+2

'Card_reg' 테이블에 레코드가 있습니까? –

+2

정말 필요한 것보다 훨씬 많은 코드를 제공했습니다. 문제를 설명하는 데 필요한 비트로 잘라주십시오. 예를 들어'while' 루프 내에서 진단 로깅 이상의 것이 필요하지 않습니다 ... http://tinyurl.com/so-hints 및 http://tinyurl.com/so-list –

+0

예를 읽으십시오. 내 데이터베이스 파일에 Card_reg 테이블이 있습니다 –

답변

0

은 같습니다 - 그것은 비어 있습니다. 그렇기 때문에 select * from Card_reg 쿼리는 결과를 반환하지 않으며 데이터 판독기는 읽을 필요가 없습니다.

+0

을 SELECT INTO (으)로 다시 구현하는 것을 고려해보십시오. 네트워크 트래픽에 많은 시간을 절약 할 수 있습니다 (일단 테이블에 데이터를 가져 오면!). – LoztInSpace