2011-06-27 66 views
0

我忙于一个项目来同步SQL Azure和SQL CE 3.5数据库。每个客户在本地都有他自己的CE数据库。当客户端与SQL Azure同步时,只有与特定用户相关的数据需要同步。 因此,我在服务器上为此表创建了过滤器模板(此时只有一个)需要同步。我已经为SyncAdapter指定了所有Select,Update和Delete命令,包括检索新时间戳和最大时间戳的命令...使用MS Sync Framework过滤同步SQL Azure和SQL CE3.0

当我运行同步代码时,出现以下错误:“无法执行提供程序。命令“SelectNewTimestampCommand”的事务回滚确保该命令的语法是否正确,检查内部异常任何特定商店的错误

的内部异常看起来是这样的:” 的InnerException:系统。 Data.SqlClient.SqlException Message =' - '附近语法不正确 Source = .Net SqlClient Dat一个提供商 错误码= -2146232060 类= 15 LineNumber上= 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的数据流,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj ) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String reset (CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,布尔异步) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method, DbAsyncResult结果) 在System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult结果,字符串方法名,布尔sendToPipe) 在System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在Microsoft.Synchronization.Data.DbSyncScopeHandler.GetLocalTimestamp(的IDbConnection连接,IDbTransaction事务) InnerException:

错误指示:“语法不正确 - '”,但这只是指定检索新TimeStamp的命令。创建该命令的代码如下所示: “的SqlCommand selectNewTimestampCommand =新的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;" 

我似乎获得在互联网上的唯一答案,是,SP2为SQL Server 2005没有安装......因为我没有使用SQL 2005,该解决方案是完全无用。

可问题是什么?

回答

0

任何特别的原因您手动设置适配器而不是使用Sync Framework提供米为你?

看看示例代码在这里:How to: Configure and Execute Synchronization with SQL Azure 这里:Extending SQL Azure data to SQL Compact using Sync Framework 2.1

+0

JuneT嗨, 感谢您的答复...我很新的同步框架,并根据资源,我发现,如果我想创建一个Filtered范围,只指定要同步的特定数据,手动创建适配器就是出路......感谢链接,我将通过它们进行大部分的定义。我最终克服了我的问题,在服务器上创建一个存储过程,该过程包含我的代码中设置的commandtext属性中的sql语句。所以,而不是提供一个SQL查询作为commandtext我提供一个存储过程。这解决了问题。 再次感谢您的回复! – TDK

+0

很高兴听到你让它工作。我不确定您创建的过滤范围有多复杂,但OOTB配置应该允许您指定要同步的列,并且filtercolumn/filterclause应允许您过滤要同步的行。 – JuneT

相关问题