SQL AzureとSQL CE 3.5データベースを同期するプロジェクトが忙しいです。各クライアントは自分のCEデータベースをローカルに持っています。クライアントがSQL Azureと同期すると、特定のユーザーに関連するデータのみを同期する必要があります。 これで、同期が必要なテーブル(この時点で1つだけ)に対して、サーバー上にフィルタテンプレートを作成しました。 SyncAdapterのすべてのSelect、Update、Deleteコマンドを指定しました。新しいタイムスタンプと最大タイムスタンプを取得するコマンドを含みます。MS Sync Frameworkを使用したSQL AzureとSQL CE3.5でのフィルタリングの同期化
同期コードを実行すると、次のエラーが表示されます。 "プロバイダを実行できませんでしたコマンド「SelectNewTimestampCommandは、」トランザクションがロールバックされたコマンドの構文が正しいことを確認し、任意のストア固有のエラーのための内部例外をチェック「
内部例外は、次のようになります」。。 のInnerException:システム。 Data.SqlClient.SqlException メッセージ= ' - 'の近くの構文が正しくありません。 ソース= .Net SqlClient Datプロバイダー のErrorCode = -2146232060 クラス= 15 LINENUMBER = 1 数= 102 手順= "" サーバー= TCP:System.Data.SqlClientので := 1つの のStackTrace lm5a34jqb2.database.windows.net 州System.Data.SqlClient.TdsParser.Run(runBehavior runBehavior、SqlCommandオブジェクトcmdHandler、SqlDataReaderのデータストリーム、BulkCopySimpleResultSet bulkCopyHandler、TdsParserStateObject stateObjでSystem.Data.SqlClient.TdsParser.ThrowExceptionAndWarningで.SqlConnection.OnError(SQLException例外、ブールbreakConnection) () ) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds、RunBehavior runBehavior、文字列のリセットSystem.Data.SqlClient.SqlCommand.RunExecuteReader(のCommandBehavior cmdBehavior、RunBehavior runBehavior、ブールreturnStream、文字列方法でSystem.Data.SqlClient.SqlCommand.RunExecuteReaderTds(たCommandBehavior cmdBehavior、RunBehavior runBehavior、ブールreturnStream、ブール非同期でOptionsString) ) Microsoft.Synchronization.Data.DbSyncScopeHandler.GetLocalTimestampでSystem.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult結果、文字列methodNameの、ブールsendToPipe)System.Data.SqlClient.SqlCommand.ExecuteNonQuery() で でDbAsyncResult結果) (のIDbConnection接続、IDbTransactionトランザクション) 内部エラー: "
エラーは次のように表示されます。 "' - '"の近くの構文が正しくありませんが、これは新しいタイムスタンプを取得するためのコマンドです。 、
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;"
私はインターネット上で取得するように見える唯一の答え; + DbSyncSession.SyncNewTimestamp "@; 「 文字列newTimestampVariable = SqlCommandオブジェクトselectNewTimestampCommand =新しいSqlCommandオブジェクト()":そのコマンドを作成したコードは次のようになります私はSQL 2005を使用していないので、解決策は非常に無駄です、... SQL Server 2005のSP2がインストールされていないということである。
はは、問題が何ができるか?
こんにちはJUNET、返信用 おかげで...私は、Sync Frameworkのに非常に新しいですし、私が見つけたリソースに応じ私はフィルタリングされたスコープを作成し、特定のデータのみを同期するように指定し、手動でアダプタを作成する方法がありました...リンクのおかげで、私はほとんどのdefを読むでしょう。私は最終的に私の問題を克服しました。私のコードで設定されているcommandtextプロパティのsqlステートメントを含むサーバーにストアドプロシージャを作成します。だから、私は格納されたprocを提供するcommandtextとしてSQLクエリを提供する代わりに。それが問題を解決しました。 返信いただきありがとうございます! – TDK
あなたはそれが働いていると聞いて良いです。あなたが作成しているフィルタリングされたスコープがどのくらい複雑かは分かりませんが、OOTBプロビジョニングでは、どの列を同期するかを指定できます。また、filtercolumn/filterclauseを使用すると、同期する行をフィルタできます。 – JuneT