문제

데이터 세트를 데이터베이스의 데이터와 동기화하는 가장 좋은 방법은 무엇입니까? 매개 변수는 다음과 같습니다.

  • 사용자가 구성했을 수있는 UI 컨트롤에 바인딩되어 있기 때문에 데이터를 다시로드 할 수 없습니다 (확장/붕괴가 될 수있는 트리 그리드입니다).
  • 변경 사항이 항상 응용 프로그램을 통해 흐르지 않기 때문에 데이터베이스의 changeflag (업데이트 된 TimeStamp와 같은)를 사용할 수 없습니다 (예 : DBA는 SQL 문으로 필드를 업데이트 할 수 있습니다).
  • 다중 사용자 시스템이므로 데이터베이스에서 업데이트 트리거를 사용할 수 없습니다.
  • 우리는 ado.net 데이터 세트를 사용하고 있습니다
  • 여러 필드가 주어진 행을 변경할 수 있습니다

데이터 세트의 병합 기능을 살펴 보았지만 "ID"열의 개념을 유지하지는 않습니다. Diffgram 기능을 살펴 보았지만 여기서 문제는 일부 외부 데이터 소스에서 발생한 변경 사항보다 동일한 데이터 세트 내의 변경 사항에서 생성되는 것 같습니다.

나는이 솔루션에서 잠시 동안 실행해 왔지만 내가 아는 접근 방식은 (비효율적 인 많은 비효율적 인) 별도의 데이터 세트를 구축 한 다음 모든 행을 필드별로 적용하는 모든 행을 반복하는 것입니다. 경계.

비슷한 시나리오가있는 사람이 있습니까? 문제를 해결하기 위해 무엇을 했습니까? 비슷한 문제가 발생하지 않더라도 솔루션에 대한 권장 사항에 감사드립니다.

감사

도움이 되었습니까?

해결책

DataSet.Merge는 이에 대해 잘 작동합니다 만약에 각 데이터 가능에 대해 기본 키가 정의되어 있습니다. 데이터 세트는 변경된 이벤트가 모든 데이터 라운드 GUI 컨트롤로 발생합니다.

테이블이 작 으면 모든 행을 다시 읽고 주기적으로 병합 할 수 있습니다. 그렇지 않으면 타임 스탬프로 읽도록 세트를 제한하는 것은 좋은 아이디어입니다. DBA에 규칙을 따르고 타임 스탬프를 업데이트하도록하십시오.

약간의 작업 인 또 다른 옵션은 트리거 또는 저장 프로 시저를 사용하여 변경 행 큐 (Timestamp, Row ID)를 유지하고 큐의 타임 스탬프의 새로 고침 쿼리를 기반으로하는 것입니다. 기본 테이블에 많은 행이있는 경우 더 효율적일 것입니다. (큐 레코드의 내부 조인을 통해) 마지막 폴링 시간 이후 변경된 행만 가져올 수 있습니다.

다른 팁

사용자가 확장 한 노드 목록을 저장하는 것이 더 쉬울 것이라고 생각합니다 (각각을 고유하게 식별 할 수 있다고 가정) 한 다음 데이터를 다시로드 한 다음 트리보기로 다시 바인 다음 모든 노드를 확장합니다. 이전에 확장되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top