2011-01-06 3 views
2

두 개의 다른 고객, 고객 A 및 고객 B와 관련된 많은 레코드가있는 SQL 2008 데이터베이스 테이블이 있다고 가정 해 봅시다.MS Sync Framework를 사용하여 클라이언트 관련 데이터를 필터링하는 방법은 무엇입니까?

모든 레코드를 가져 오는 팻 클라이언트 응용 프로그램을 빌드하고자합니다 요청 사용자의 자격 증명을 기반으로 고객 A 또는 고객 B에만 해당되는 데이터를 가져 와서 가져온 레코드를 임시 로컬 테이블에 저장합니다.

보안 필터링에 의존하지 마십시오 : 나는이 작은 밤을 가로 질러 왔을 때 나는 MS 동기화 프레임 워크는 이러한 목표를 달성하기 위해 사용할 수

생각, 내가 행 필터링에 대해 읽기 시작했다. 클라이언트 또는 사용자 ID를 기반으로 서버 에서 데이터를 필터링하는 기능은 보안 기능이 아닌 입니다. 다른 단어에서는이 방법을 사용하여 한 클라이언트가 다른 클라이언트에 속한 데이터 을 읽지 못하게 할 수 있습니다. 이 필터링 유형은 데이터를 분할하고 데이터 양을 클라이언트 데이터베이스 으로 줄이는 경우에만 유용합니다.

그래서, 이것은 MS 동기화 프레임 워크는 당신이 A 지점과 B 지점 사이의 전체 테이블을 복제 할 좋은 방법입니다 내게 말하고있다?

프레임 워크의 특성이 극히 제한적으로 보이지 않습니까? 아니면이 문장을 잘못 해석 한 것입니까? 아니면 내 목적을 달성하기 위해 프레임 워크를 사용하는 다른 방법이 있습니까?

아이디어 누구?

감사합니다.

답변

1

아니요, 단지 보안 경고 일뿐입니다.

우리는 반 연결 응용 프로그램에서 광범위하게 필터링을 사용합니다.

//helper 
void PrepareFilter(string tablename, string filter) 
{ 
    SyncAdapters.Remove(tablename); 

    var ab = new SqlSyncAdapterBuilder(this.Connection as SqlConnection); 
    ab.TableName = "dbo." + tablename; 
    ab.ChangeTrackingType = ChangeTrackingType.SqlServerChangeTracking; 
    ab.FilterClause = filter; 
    var cpar = new SqlParameter("@filterid", SqlDbType.UniqueIdentifier); 
    cpar.IsNullable = true; 
    cpar.Value = DBNull.Value; 
    ab.FilterParameters.Add(cpar); 

    var nsa = ab.ToSyncAdapter(); 
    nsa.TableName = tablename; 

    SyncAdapters.Add(nsa); 
} 

// usage 
void SetupFooBar() 
{ 
    var tablename = "FooBar"; 
    var filter = "FooId IN (SELECT BarId FROM dbo.GetAllFooBars(@filterid))"; 

    PrepareFilter(tablename, filter); 
} 
+0

대 :

다음은 시작하는 몇 가지 코드입니다! 나는 정말로, * 내가 이것을 무시할 수있는 무언가가되기를 원했다. –

+0

비슷한 것을 구현하고 있습니다. 클라이언트 측 데이터베이스에서 무엇을 사용하고 있습니까? 소형 또는 고속? – stombeur

+0

@StephaneT : 컴팩트. 정보에 대한 – leppie

관련 문제