2016-09-15 7 views
0

I가 다음 코드 이제C#을 예상대로 작동하지 '계속'

private void bgwSendMail_DoWork(object sender, DoWorkEventArgs e) 
    { 
     DataSet ds = getMailToSend(); 
     DataTable table = ds.Tables[0]; 
     { 
      foreach (DataRow row in table.Rows) 
      { 
       { 
        string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString(); 
        string attachment2 = ds.Tables[0].Rows[0]["Attachment2"].ToString(); 
        string attachment3 = ds.Tables[0].Rows[0]["Attachment3"].ToString(); 
        string attachment4 = ds.Tables[0].Rows[0]["Attachment4"].ToString(); 
        string mailTo = ds.Tables[0].Rows[0]["EmailTo"].ToString(); 
        string mailSubject = ds.Tables[0].Rows[0]["EmailSubject"].ToString(); 
        string mailBody= ds.Tables[0].Rows[0]["EmailBody"].ToString(); 
        string uid = ds.Tables[0].Rows[0]["uid"].ToString(); 

        if (String.IsNullOrEmpty(attachment1)) 
        { 
         //TODO Send Email Straight away ignore rest 

        } 
        else 
        { 
         if (!String.IsNullOrEmpty(attachment1)) 
         { 
          bool attachment1Exists = checkFileExists(attachment1); 
          if (attachment1Exists == false) 
          { 

           continue; 
          } 
         } 

우리가 맨 아래에 (때리게 않는) 계속 쳤을 때 나는 우리가 다시 위로 종료해야한다는, 기대 아래의 foreach와이 발생하지 않습니다

enter image description here

데이터 세트에서 다음 레코드로 이동, 그것은 동일하게 계속되는 기록 반복에서,이 정상 온을 반복 처리?

정상적인 경우 정상적으로 일단 foreach에서 데이터 테이블의 해당 행을 무시하게하는 가장 좋은 방법은 무엇입니까?

+12

실제로 어디서나'row'를 사용하지 않습니다. 'ds.Tables [0] .Rows [0]'을 계속 사용하고 있습니다. 항상 동일한 데이터를 처리한다는 의미가됩니다. –

답변

6

continue이 예상대로 작동합니다.

테이블의 모든 행을 열거하지만 사용하지는 않습니다. 대신 당신은 항상 테이블의 첫 번째 행에 액세스 : 당신은 항상 ds.Tables[0].Rows[0]에 액세스하는

DataTable table = ds.Tables[0]; 
foreach(DataRow row in table.Rows) 
{ 
    string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString(); 
    // ... 
} 

.

대신에이 코드를 사용해야합니다, 그것은 무한 루프 아니다 그래서 예상대로 실제로 테이블의 모든 행을 열거하는

foreach(DataRow row in table.Rows) 
{ 
    string attachment1 = row["Attachment1"].ToString(); 
    // ... 
} 

을하지만 당신은 테이블의 모든 행을 사용하는 것이 아니라 단지 먼저.

+0

무슨 판자, 좋은 시간 동안 내 머리를 긁적 거리고있어, 고마워! –

4

변경

string attachment1 = ds.Tables[0].Rows[0]["Attachment1"].ToString();

string attachment1 = row["Attachment1"].ToString();

와 DataRow를 다른 모든 후속 참조

합니다.