我正在开发一个使用本地数据库的windows应用程序。我想添加一个功能来同步所有本地数据到sql azure。
目前我使用以下代码。它使我能够成功地同步一个特定的表。,这里是"Author_Master"
string sqlazureConnectionString = "XXXX";
string sqllocalConnectionString = "Server=localhost;Database=Enh_Branchwise_Master_Bookshop;Trusted_Connection=True";
using (SqlConnection serverCon = new SqlConnection(sqlazureConnectionString))
using (SqlConnection clientCon = new SqlConnection(sqllocalConnectionString))
{
var provider1 = new SqlSyncProvider("scope1", serverCon);
var provider2 = new SqlSyncProvider("scope1", clientCon);
prepareServer(provider1);
prepareClinet(provider2, serverCon);
SyncOrchestrator sync = new SyncOrchestrator();
sync.LocalProvider = provider1;
sync.RemoteProvider = provider2;
sync.Synchronize();
}
以及以下方法
private static void prepareServer(SqlSyncProvider provider)
{
SqlConnection connection = (SqlConnection)provider.Connection;
SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning(connection);
if (!config.ScopeExists(provider.ScopeName))
{
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(provider.ScopeName);
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Author_Master", connection));
config.PopulateFromScopeDescription(scopeDesc);
config.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
config.Apply();
}
}
private static void prepareClinet(SqlSyncProvider provider, SqlConnection sourceConnection)
{
SqlConnection connection = (SqlConnection)provider.Connection;
SqlSyncScopeProvisioning config = new SqlSyncScopeProvisioning(connection);
if (!config.ScopeExists(provider.ScopeName))
{
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(provider.ScopeName);
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Author_Master", sourceConnection));
config.PopulateFromScopeDescription(scopeDesc);
config.Apply();
}
}
我的问题是:有没有一种方法可以同时同步数据库中的所有表,而不需要逐个添加表。
我的两个数据库有相同的模式。请给出一些建议,
您可以使用SQL数据同步工具。
SQL数据同步是Windows Azure SQL数据库的一个特性。
使用SQL Data Sync,您可以通过Windows Azure SQL数据库实例同步选定的数据。
SQL Data Sync支持Windows Azure数据中心内或跨数据中心的同步。
SQL Data Sync还支持SQL数据库实例和本地SQL Server数据库的混合配置。
SQL Data Sync服务免费
更多详细信息请查看ScottGu的博客文章下的"SQL数据同步"子主题。
如果你使用的是同步框架,你必须明确地告诉它哪些表(甚至列)是要同步的。
Dim clientProvision As SqlSyncScopeProvisioning = New SqlSyncScopeProvisioning(clientCon, syncScope)
If Not (clientProvision.ScopeExists("Scope_" + tableName)) Then
clientProvision.Apply()
End If
Dim serverProvision As SqlSyncScopeProvisioning = New SqlSyncScopeProvisioning(serverCon, syncScope)
If Not (serverProvision.ScopeExists("Scope_" + tableName)) Then
serverProvision.Apply()
End If
Dim syncOrchestrator As New SyncOrchestrator()
' Create provider for SQL Server
Dim clientProvider As New SqlSyncProvider("Scope_" + tableName, clientCon)
' Set the command timeout and maximum transaction size for the SQL Azure provider.
Dim serverProvider As New SqlSyncProvider("Scope_" + tableName, serverCon)
' Set Local provider of SyncOrchestrator to the onPremise provider
syncOrchestrator.LocalProvider = clientProvider
' Set Remote provider of SyncOrchestrator to the azureProvider provider
syncOrchestrator.RemoteProvider = serverProvider
' Set the direction of SyncOrchestrator session to Upload and Download
syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload
'Dim thread As New Threading.Thread(Sub() ShowStatistics(syncOrchestrator.Synchronize(), tableName))
'thread.Start()
ShowStatistics(syncOrchestrator.Synchronize(), tableName)
您可以使用SQL数据库迁移向导 (SQLAzureMW)。
它是一个开源应用程序。
你可以用它来迁移你的SQL数据库和Windows Azure SQL数据库。
SQLAzureMW有一个用户交互向导,可以引导用户完成分析/迁移过程。
获取有关SQL数据库迁移向导
的详细信息