我已经用两种方式在SQL Server 2008和SQL Compact数据库之间实现了同步。
它非常适合在数据库中插入和更新数据并且很好地同步。
但是如果我尝试从sql server之类的数据库中删除一条记录,那么我将与sql compact同步后再次回来。
我希望如果我从一个数据库中删除记录,则需要从其他数据库中删除。
我不知道为什么它会再次回来请帮助我。
我在这里给出的源代码。
string serverCon = "Data Source=192.168.0.2\\sqlserver2008r2;Initial Catalog=test;Integrated Security=false;UID=sa;PWD=ifour@1234;";
const string localCon = "Data Source=|DataDirectory|\\DB\\test.sdf;Persist Security Info=False;";
var serverConn = new SqlConnection(serverCon);
var clientSqlConn = new SqlCeConnection(localCon);
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("filter");
DbSyncTableDescription customerDescription =
SqlSyncDescriptionBuilder.GetDescriptionForTable("Demo", serverConn);
scopeDesc.Tables.Add(customerDescription);
SqlSyncScopeDeprovisioning serverSqlDepro = new SqlSyncScopeDeprovisioning(serverConn);
SqlSyncScopeProvisioning serverTemplate = new SqlSyncScopeProvisioning(serverConn, scopeDesc, SqlSyncScopeProvisioningType.Template);
serverTemplate.ObjectSchema = "dbo";
serverTemplate.Tables["Demo"].AddFilterColumn("bit");
serverTemplate.Tables["Demo"].FilterClause = "[side].[bit] = @customertype";
SqlParameter param = new SqlParameter("@customertype", SqlDbType.Bit, 1);
serverTemplate.Tables["Demo"].FilterParameters.Add(param);
if (serverTemplate.TemplateExists("filter"))
{
serverSqlDepro.DeprovisionTemplate("filter");
}
serverTemplate.Apply();
SqlSyncScopeProvisioning serverProvRetail = new SqlSyncScopeProvisioning(serverConn);
serverProvRetail.ObjectSchema = "dbo";
serverProvRetail.PopulateFromTemplate("RetailCustomers", "filter");
serverProvRetail.Tables["Demo"].FilterParameters["@customertype"].Value = false;
if (serverProvRetail.ScopeExists("filter"))
{
serverSqlDepro.DeprovisionScope("filter");
}
//serverProvRetail.PopulateFromScopeDescription(scopeDesc);
serverProvRetail.Apply();
serverProvRetail.PopulateFromScopeDescription(scopeDesc);
SqlCeSyncScopeDeprovisioning clientSqlCeDepro = new SqlCeSyncScopeDeprovisioning(clientSqlConn);
var clientSqlDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("RetailCustomers", null, "dbo", serverConn);
var clientSqlConfig = new SqlCeSyncScopeProvisioning(clientSqlConn, clientSqlDesc);
if (clientSqlConfig.ScopeExists("RetailCustomers"))
{
clientSqlCeDepro.DeprovisionScope("RetailCustomers");
}
clientSqlConfig.Apply();
SampleSyncOrchestrator syncOrchestrator;
SyncOperationStatistics syncStats;
// Data is downloaded from the server to the SQL Server client.
syncOrchestrator = new SampleSyncOrchestrator(
new SqlCeSyncProvider("RetailCustomers", clientSqlConn, null),
new SqlSyncProvider("RetailCustomers", serverConn, null, "dbo")
);
syncStats = syncOrchestrator.Synchronize();
}
public class SampleSyncOrchestrator : SyncOrchestrator
{
public SampleSyncOrchestrator(RelationalSyncProvider localProvider, RelationalSyncProvider remoteProvider)
{
this.LocalProvider = localProvider;
this.RemoteProvider = remoteProvider;
this.Direction = SyncDirectionOrder.DownloadAndUpload;
}
}