Sql Compact 3.5同步失败

时间:2012-11-21 03:24:50

标签: sql-server-ce microsoft-sync-framework

我有一个在2个数据库之间同步的应用程序:中央数据库托管在Sql Server 2008上,本地数据库是Sql Compact 3.5数据库。

我不时需要升级同步范围中包含的其中一个表的模式,我不想再取消配置和配置,所以我使用了this方法,对于Sql Compact我有一些东西像这样:

public void UpdateProvisionSchema(string connString, string scopeName, string newConfigData)
{
    _log.Verbose("UpdateProvisionSchema: " + scopeName);

    try
    {
        string query = string.Format("SELECT [scope_config_id] FROM [scope_info] WHERE [sync_scope_name]='{0}'", scopeName);
        Guid config_id = (Guid)SqlCompactManager.ExecuteScalar(connString, query);

        string updateCommand = string.Format("UPDATE scope_config SET [config_data]='{0}' WHERE [config_id] ='{1}'", newConfigData, config_id);
        SqlCompactManager.ExecuteCommand(connString, updateCommand);
    }
    catch (Exception ex)
    {
        _log.Error(ex, string.Format("Failed to upgrade schema for scope {0}", scopeName));
        throw new Exception(string.Format("Update of provisioned schema failed for scope: {0}", scopeName));
    }
}

我手动更改了我的表的配置范围。我认为我发送的范围配置是正确的,因为我通过配置一个空表来生成它。

我刚刚在同步范围中包含的表中添加了一列(其数据仅从中央数据库下载到本地数据库),现在我收到了关于ApplyChangeFailed的错误。

似乎在Sql Compact数据库中,包含在问题的同步范围中的表有这一列:__sysTrackingContext,它不存在于中心表上。

我第一次创建表并配置它们然后添加了2个新列(BusinessType,HideCommentAndSerialNumber)。如果我查看DbApplyChangeFailedEventArgs并检查列,我会看到以下内容:

中部:

.. | BusinessType | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_update_peer_key | sync_create_peer_timestamp | sync_create_peer_key |

本地:

.. | __sysTrackingContext | BusinessType | sync_update_peer_key | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_create_peer_key | sync_create_peer_timestamp |

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。范围是问题发生,它只将数据从中央数据库下载到本地数据库。

当我更新表架构时,我执行了以下操作: - 向两个数据库添加列 - 更新两个数据库上新列的值 - 更新两个数据库上的配置模式

问题是我执行了一个更新两个数据库上的列值的脚本。它只需要在中央数据库上执行,并且数据将在同步期间下载到客户端。

我改变了这一点,现在它起作用了;它以前也有类似的方案(添加/删除/更改已经在同步范围内的表的列类型)。