2008-11-10 2 views
1

SQL Server 2005 CE 프레임 워크 3.5를 사용하고 있고 손에 들고 SQL Server와 병합 복제를 시도하고 있습니다. 동기화 할 코드를 실행하면 코드가 영원히 멈추는 것처럼 보입니다. 코드에 중단 점을 넣으면 Synchronize() 호출을 지나칠 수 없습니다.SQL Server CE 3.5 병합 복제 동기화가 걸려있다

SQL Server에서 복제 모니터를 보면 구독이 더 이상 동기화되지 않고 오류가 표시되지 않는 지점이됩니다. 따라서 동기화가 완료되었다고 가정합니다.

http://server/virtualdirectory/sqlcesa35.dll?diag은 어떤 문제도보고하지 않습니다.

이것은 모든 핸드 헬드 개발에서의 첫 번째 시도이므로, 나는 뭔가를 잘못했을 수도 있습니다. 그러나 SQL Server는 성공적인 동기화를보고하는 것 같습니다.

나는 이것에 나이를 보냈다 어떤 도움든지 중대하게 평가 될 것입니다!

여기 내 코드입니다.

const string DatabasePath = @"SD Card\mydb.sdf"; 
var repl = new SqlCeReplication 
       { 
        ConnectionManager = true, 
        InternetUrl = @"http://server/virtualdirectory/sqlcesa35.dll", 
        Publisher = @"servername", 
        PublisherDatabase = @"databasename", 
        PublisherSecurityMode = SecurityType.DBAuthentication, 
        PublisherLogin = @"username", 
        PublisherPassword = @"password", 
        Publication = @"publicationname", 
        Subscriber = @"PPC", 
        SubscriberConnectionString = "Data Source=" + DatabasePath 
       }; 
try 
{ 
    Cursor.Current = Cursors.WaitCursor; 
    if (!File.Exists(DatabasePath)) 
    { 
     repl.AddSubscription(AddOption.CreateDatabase); 
    } 
    repl.Synchronize(); 
    MessageBox.Show("Successfully synchronised"); 
} 
catch (SqlCeException e) 
{ 
    DisplaySqlCeErrors(e.Errors, e); 
} 
finally 
{ 
    repl.Dispose(); 
    Cursor.Current = Cursors.Default; 
} 

답변

0

데이터를 물리적 디스크로 복사하는 데 오랜 시간이 걸렸습니다. SQL Server 복제가 완료되었지만 여전히 데이터를 SD 카드에 복사하고있었습니다.

복제하는 테이블의 양을 줄임으로써이를 확인했으며보다 즉각적인 응답 (이 오류와 관련이없는 또 다른 오류)이 있습니다.

어쨌든 고맙습니다 :)

1

당신이 동기화 작업을 빠르게 할 수있는 또 다른 것은 당신의 PDA의 주요 프로그램 메모리에 (대신 당신의 예에서와 같이 SD 카드에)있는 DB 파일 경로를 지정하는 것입니다 . 최대 4 배속의 속도 향상이 있어야합니다 (동기화하는 데 걸리는 시간은 현재 25 % 정도입니다).

PDA의 주 프로그램 메모리가 부족한 경우 동기화 호출 후 System.IO.File.Move()를 사용하여 SD 카드로 파일을 이동할 수 있습니다. 이것은 조금 이상하게 보입니다. 그러나 프로그램 메모리에 동기화하고 SD 카드에 복사하는 것이 훨씬 빠르며 SD 카드에 직접 동기화하는 것이 더 빠릅니다.