2011-06-15 3 views
2

자주 액세스하는 일부 테이블의 조회 시간을 향상시키기 위해 DataTable의 행 ID 필드를 행 자체에 매핑하는 HashMap을 만듭니다. 이제는 때때로 RowNotInTableException이 발생합니다.DataTable-RowNotInTableException과 독립적으로 DataRow를 저장합니다.

이 행은 테이블에서 삭제되었으며 데이터가 없습니다. BeginEdit()를 사용하면이 행에 새 데이터를 만들 수 있습니다.

그물을 조금 둘러 본 후에는 DataRows가 DataTable에 연결되어 있지 않은 것 같습니다. DataTable은 메모리에 남아 있지만 (DataRow가 참조를 유지하는지 확실하지 않지만 어쨌든 여전히 캐시하고 있습니다) 모든 행을 HashMap에 격리하여 유지하면서 무언가를 깨뜨릴 수 있습니까? 이 오류가 발생하는 다른 이유는 무엇입니까? 이 게시물 RowNotInTableException when accessing second time 도 비슷한 문제에 대해 설명하지만 해결 방법도 없습니다. 그 어떤 변화도 가져 오지면

UPDATE 것은

사실 DataRowViews를 저장하고있다.

답변

3

DataRow는 항상 일부 DataTable에 연결되어야합니다. DataTable에서 제거 된 경우에도 행에 여전히 테이블에 대한 참조가 있습니다.

이유는 table 스키마가 DataRow가 아닌 ​​DataTable (데이터 자체도 포함)에 배치되기 때문입니다.

DataTable없이 빠른 검색을 원할 경우 DataRow 대신 자체 구조를 사용하십시오.

+0

좋아요,하지만 첨부한다는 것은 무엇을 의미합니까? 나는 원래의 dataTable을 파괴하지 않는다. 단지 추가적인 구조로 DataRowViews에 대한 참조를 저장한다. (업데이트를 참고하십시오. DataRow가 아닌 ​​DataRowView를 저장한다는 사실을 깨달았습니다. 차이가 있습니까?) 또한 자주 사용하는 데이터 테이블의 일반적인 캐시 구조이고 자체 데이터 구조를 만들기 때문에 자체 구조가 좋지 않습니다. 각 테이블 구조에 대한 구조가 올바른 방법 일 수 없습니까? – Nicolas78

+0

캐시 된 행이 삭제되지 않았습니까? (DataRow.Delete())? – TcKs

+0

nah 나는 행을 삭제하지 않습니다. 방금 읽은 테이블을 캐시에 저장하고 결코 다시 쓰지 않습니다 (쓰기 방식). 그래서 나는 그 오류에 대해 당혹 스럽다. – Nicolas78

관련 문제