1

SQL Server 2005 CE フレームワーク 3.5 を使用しており、ハンドヘルドと SQL Server の間でマージ レプリケーションを使用しようとしています。同期するコードを実行すると、永遠に座っているように見えます。また、コードにブレークポイントを配置すると、Synchronize() の呼び出しを通過することはありません。

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;
}
4

2 に答える 2

1

同期操作を高速化するために実行できるもう1つの方法は、PDAのメインプログラムメモリにあるdbファイルパスを指定することです(例のようにSDカードではありません)。最大4倍の速度の向上が見られるはずです(つまり、同期にかかる時間は、現在の場合の25%にすぎない可能性があります)。

PDAのメインプログラムメモリが不足している場合は、System.IO.File.Move()を使用して、Synchronize呼び出しの後にファイルをSDカードに移動できます。これは少し奇妙に思えますが、プログラムメモリに同期してSDカードにコピーする方が、SDカードに直接同期するよりもはるかに高速です。

于 2008-11-11T05:28:36.203 に答える
0

その後、データを物理ディスクにコピーするのに時間がかかっていることがわかりました。SQL Server のレプリケーションは完了しましたが、まだデータを SD カードにコピーしていました。

レプリケートするテーブルの量を減らすことでこれを特定し、より迅速な応答を得ました (別のエラーですが、この問題とは関係ありません)。

とにかくありがとう :)

于 2008-11-10T17:08:59.770 に答える