【问题标题】:Filtered Synchronization with SQL Azure and SQL CE3.5 using MS Sync Framework使用 MS Sync Framework 与 SQL Azure 和 SQL CE3.5 进行筛选同步
【发布时间】:2011-06-27 14:57:47
【问题描述】:

我正忙于同步 SQL Azure 和 SQL CE 3.5 数据库的项目。每个客户在本地都有自己的 CE 数据库。当客户端与 SQL Azure 同步时,只需要同步与特定用户相关的数据。 所以我在服务器上为需要同步的表(此时只有一个)创建了过滤器模板。我已经为 SyncAdapter 指定了所有的 Select、Update 和 Delete 命令,包括检索 New 和 Max TimeStamps 的命令...

当我运行同步代码时,我收到以下错误:“无法执行提供程序命令'SelectNewTimestampCommand'。事务已回滚。确保命令语法正确并检查任何存储的内部异常 -具体错误。"

内部异常如下所示:" 内部异常:System.Data.SqlClient.SqlException 消息='–' 附近的语法不正确。 Source=.Net SqlClient 数据提供者 错误代码=-2146232060 班级=15 行号=1 数量=102 程序="" 服务器=tcp:lm5a34jqb2.database.windows.net 状态=1 堆栈跟踪: 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) 在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,字符串 resetOptionsString) 在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,布尔异步) 在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,布尔 returnStream,String 方法,DbAsyncResult 结果) 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult 结果,字符串方法名,布尔值 sendToPipe) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 Microsoft.Synchronization.Data.DbSyncScopeHandler.GetLocalTimestamp(IDbConnection 连接,IDbTransaction 事务) 内部异常: "

错误指示:“'-' 附近的语法不正确”但这只是指定用于检索新时间戳的命令。创建该命令的代码如下所示: "SqlCommand selectNewTimestampCommand = new SqlCommand(); 字符串 newTimestampVariable = "@" + DbSyncSession.SyncNewTimestamp;

        selectNewTimestampCommand.CommandType = CommandType.Text;
        selectNewTimestampCommand.Parameters.Add(newTimestampVariable, SqlDbType.Timestamp);
        selectNewTimestampCommand.Parameters[newTimestampVariable].Direction = ParameterDirection.Output;
        selectNewTimestampCommand.CommandText = "SELECT " + newTimestampVariable + " = ((min_active_rowversion()) – 1)";

       mySyncProvider.SelectNewTimestampCommand = selectNewTimestampCommand;"

我似乎在互联网上得到的唯一答案是没有安装 SQL Server 2005 的 SP2...由于我不使用 SQL 2005,因此该解决方案毫无用处。

可能是什么问题?

【问题讨论】:

    标签: c# azure-sql-database microsoft-sync-framework


    【解决方案1】:

    您手动设置适配器而不是让 Sync Framework 为您提供它们的任何特殊原因?

    在此处查看示例代码:How to: Configure and Execute Synchronization with SQL Azure 和此处:Extending SQL Azure data to SQL Compact using Sync Framework 2.1

    【讨论】:

    • 您好 JuneT,感谢您的回复...我对 Sync Framework 很陌生,根据我找到的资源,如果我想创建过滤范围,则仅指定某些数据同步,手动创建适配器是出路...感谢链接,我将最清楚地阅读它们。我最终克服了我的问题,通过在服务器上创建一个存储过程,该过程包含在我的代码中设置的 commandtext 属性中的 sql 语句。因此,我没有提供作为命令文本的 sql 查询,而是提供了一个存储过程。这解决了问题。再次感谢您的回复!
    • 很高兴听到您成功了。我不确定您要创建的过滤范围有多复杂,但 OOTB 配置应该允许您指定要同步的列,并且 filtercolumn/filterclause 应该允许您过滤要同步的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多