2009-10-14 3 views
2

ASP.NET 응용 프로그램에 2 개의 데이터 테이블이 있습니다. 내가 일치하는 항목을 찾을 경우 둘 다하지만 내가 루프와, 정말 같은 외부 데이터 테이블에서 특정 행을 삭제 :이 dtFixedActs는 1 행을 포함하는 경우를 제외하고, 잘 작동과 일치하는 것입니다datatable + AcceptChanges에서 행 제거

For i As Integer = 0 To dtFixedActs.Count - 1 
     For j As Integer = 0 To dtTotals.Count - 1     
      If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then 
       dtFixedActs.Rows(i).Delete() 
       i += 1 
       j += 1 
      End If 
     Next    
     dtFixedActs.AcceptChanges() 
    Next 

다른 데이터 테이블에 있습니다. "위치 1에 행이 없습니다."오류가 발생합니다. 이것은 i + 1에서 다음 행으로 이동하려고하기 때문에 의미가 있습니다.이 경우에는 불가능합니다.

나는 dtFixedActs.AcceptChanges 명령을 1 차 루프 안팎으로 옮겨 보려고했지만 아무 소용이 없었습니다. 또한 i + = 1 행을 주석 처리했지만 "삭제 된 행 정보는 행을 통해 액세스 할 수 없습니다."라는 메시지가 나타납니다. 오류.

이 문제를 해결하는 방법을 모르겠습니다. dtFixedActs에 둘 이상의 행이 들어 있으면 문제가 발생하지 않습니다.

제안 사항?

답변

2

가장 이상한 점은 문제를 해결 한 것 같습니다. try catch 예외 코드 블록을 다음과 같이 추가했습니다.

For i As Integer = 0 To dtFixedActs.Count - 1 
     For j As Integer = 0 To dtTotals.Count - 1     
      Try 
       If dtFixedActs.Rows(i).Item("Activity") = dtTotals.Rows(j).Item("Activity") Then 
        dtFixedActs.Rows(i).Delete() 
        i += 1 
        j += 1 
       End If 
      Catch ex As Exception 

      End Try 

     Next 
     dtFixedActs.AcceptChanges() 
    Next 

모든 것이 잘 작동하는 것처럼 보입니다. 이것이 유효한 해결책인지 의심스러운 사람이 있습니까?

0

외부 경계까지 증가하므로 dfFixedActs (dtFixedActs.Count - 1)와 일치하는 항목이 발견되면 문제가 발생합니다. 은 i 또는 j가 경계 밖으로 벗어나는 것을 방지하기위한 조건을 추가했습니다 (예 : < = dtFixedActs.Count - 1 및 j < = dtTotals.Count - 1).

+0

감사합니다. Henry, 이미 시도했지만 "삭제 된 행 정보는 행을 통해 액세스 할 수 없습니다."라는 메시지가 나타납니다. 오류. –

+0

두 번째 다음에 다시 테스트해야합니다. 삭제 한 행 수를 추적하는 또 다른 변수 x 일 수 있습니다. 당신은 dtFixedActs.Count - 1 루프 수 없습니다 dtFixedActs.Count - 1 - x 루프 수 있습니다. –

+0

catch가 작동하지만 예외를 처리해야합니다. 또 다른 요점은 명백한 예외에 대한 코드를 열어 두지 말아야한다는 것입니다. –

0

응용 프로그램에서 성능이 저하되는 것을 발견하면 try/catch는 수행 할 수있는 가장 비싼 작업 중 하나입니다. 내 테스트에서, 언젠가 전에, 그것은 250mSec 걸리고 있었다. 그 이후로 나는 결코 생각하지 못한 오류에 대한 최종 보호 조치를 제외하고는 시도 잡기를 사용하지 않습니다. 그럼에도 불구하고 특정 오류를 인식하고 직접 처리 할 수 ​​있도록 오류를 기록합니다.