2012-08-16 2 views
0

나는 데이터베이스에서 발생하는 업데이트를 듣기 위해 일종의 폴링을하려고합니다. 지금까지 데이터베이스 (또는 몇 개의 테이블)의 MD5 해시 (또는 모든 유형 또는 해시)를 가져 와서 변수에 저장하고이 프로 시저를 반복적으로 반복하는 스레드를 실행하여 마지막 결과와 비교했습니다. 다른 점이 있다면, 버튼이 Enabled로 설정되어 데이터베이스로드 기능을 중지시킵니다.전체 데이터베이스의 MD5를 가져 와서 변경 사항을 폴링하는 데 어떻게 사용할 수 있습니까?

그 방법이 좋습니까? 그렇지 않다면, 왜? 그렇다면 어떻게?

부분은 데이터베이스 측면에서 MD5 해시를 얻는 방법을 잘 모르겠습니다. easly 모든 데이터를 가져 와서 모든 클라이언트 측에서 md5 해시를 얻을 수는 있지만 ... 네.

SQL에 LINQ를 사용하고 있지만 원시 쿼리를 실행하는 데 컨텍스트를 사용할 수 있을지 걱정됩니다. 이것은 WinForms, .NET 3.5에 있습니다 (하지만 중요하지는 않습니다 ...).

힌트를 주시면 감사하겠습니다. 감사!

+2

아니요 ... 아니요. –

+0

"데이터베이스로드 기능"이란 무엇입니까?이 두 테이블의 데이터를 캐시합니까? –

+0

DataContext => BindingSource입니다. 캐시 된 것으로 간주 될 내용이 확실하지 않습니다. – Pluc

답변

6

바퀴를 재발 명하지 마십시오. 작업에 적합한 도구를 사용

  • Change Tracking 변경은 SQL Server의 추적 2008 이러한 변경 사항에 대한 정보와 함께 사용자 테이블에 적용된 변경 내용 만 어플리케이션을 취득 할 수 있습니다

  • Change Data Capture 변경 데이터 캡처는 SQL Server 테이블에 적용된 삽입, 업데이트 및 삭제 작업을 캡처하고 변경 내용을 쉽게 사용할 수있는 관계형 형식으로 사용할 수 있도록 설계되었습니다. 변경 데이터 캡처에 사용되는 변경 테이블에는 추적 된 소스 테이블의 열 구조를 미러링하는 열과 발생한 변경 사항을 이해하는 데 필요한 메타 데이터가 포함됩니다.

상술 한 두 기술 가끔씩 접속 시스템을 대상으로하는 것이

주 (예.로드에 연결하는 모바일 사용자는 로컬 스냅 샷을 새로). 영구적으로 연결되어 있고 백엔드에서 변경이 발생했을 때 디스플레이를 새로 고침해야하는 시스템의 경우 올바른 기술은 Query Notifications입니다.

+0

고마워, 내가 무엇을 찾고 있어야합니다. 나는 그것을 시도하고 잠시 후에 당신에게 돌아올거야. 그러나 우리는 SQL 2005를 사용하고 있다고 확신합니다. (두 번째 옵션을 확인해 보겠습니다. – Pluc

+0

예, 두 기술 모두 SQL Server 2008 이상입니다. 쿼리 알림은 2005입니다. –

+0

LinqToSQL을 사용하는 경우 http://code.google.com/p/linqtocache/ –

1

모든 데이터 을 폴링하여 데이터베이스 수정을 감지하는 것은 최악의 경우 일 수 있습니다. 실제 수정 작업을 수행하는 클라이언트를 제어 할 수 없다면 AFAIK는 이렇게 할 수있는 정상적인 방법이 아닙니다. 앱에이 수준의 정보가 필요한 경우 모두가 협조해야합니다.

여전히 끔찍한 해결 방법으로 최대 값을 선택하고 로컬 캐시 된 "이전 최대 값"과 비교하여 모든 테이블과 각 테이블 폴링에 rowversion 열을 추가 할 수 있습니다. 행이 업데이트 될 때마다 rowversion이 변경되므로 무언가가 업데이트되었음을 ​​알뿐만 아니라 필요한 경우 테이블에서 업데이트 된 레코드 만 선택할 수도 있습니다.

+0

질문을 올바르게 읽으면 모든 데이터를 폴링하지 않으려 고합니다. 따라서 클라이언트 쪽이 아닌 SQL 쪽에서 MD5 해시를 얻는 방법을 묻는 이유는 무엇입니까? – Pluc

+0

rowversion 문제는 삭제 추적입니다. –

+1

@RemusRusanu : 예. 저는 SQL 서버 초보자입니다. 그래서 내가 생각해 낼 수있는 최고의 것이 었습니다. 물론 올바른 대답을 upvoted. – Jon

관련 문제