Я пытаюсь использовать SyncOrchestrator для отправки изменений из LocalDB в базу данных azure, но получаю исключение FormatException. Я использую следующий код для обеспечения:
string tableName = "AT5600VerHeader";
using (var remote = new SqlConnection(RemoteConnectionString))
using (var local = new SqlConnection(LocalConnectionString))
{
// Define the scope.
string scopeName = $"{tableName}Scope";
DbSyncScopeDescription scope = new DbSyncScopeDescription(scopeName);
// Get the description of the tables from the database.
DbSyncTableDescription description = SqlSyncDescriptionBuilder.GetDescriptionForTable(tableName, remote);
// Add the description to the scope.
scope.Tables.Add(description);
// Create the provisioning.
SqlSyncScopeProvisioning remoteProvisioning = new SqlSyncScopeProvisioning(remote, scope);
SqlSyncScopeProvisioning localProvisioning = new SqlSyncScopeProvisioning(local, scope);
// Create the provisioning object if it does not exist.
remoteProvisioning.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
localProvisioning.SetCreateTableDefault(DbSyncCreationOption.CreateOrUseExisting);
// Execute the provisioning if the scope does not exist already.
if (!remoteProvisioning.ScopeExists(scopeName))
{
remoteProvisioning.Apply();
}
if (!localProvisioning.ScopeExists(scopeName))
{
localProvisioning.Apply();
}
}
И код синхронизации выглядит следующим образом:
using (var remote = new SqlConnection(RemoteConnectionString))
using (var local = new SqlConnection(LocalConnectionString))
{
foreach (var kvp in tables)
{
// Create the sync orhcestrator.
SyncOrchestrator syncOrchestrator = new SyncOrchestrator
{
// Setup the providers.
LocalProvider = new SqlSyncProvider($"{tableName}Scope", local),
RemoteProvider = new SqlSyncProvider($"{tableName}Scope", remote),
// Set the direction of sync session.
Direction = Microsoft.Synchronization.SyncDirectionOrder.Upload
};
// Perform the syncrhonization.
SyncOperationStatistics stats = syncOrchestrator.Synchronize();
if (stats.DownloadChangesFailed != 0 || stats.UploadChangesFailed != 0)
{
success = false;
break;
}
}
}
Исключение выдается при вызове SyncOperationStatistics stats = syncOrchestrator.Synchronize();
. Сообщения об исключениях следующие:
Message: 'Failed to convert parameter value from a String to a Boolean.'
Inner Exception Message: String was not recognized as a valid Boolean
Насколько я могу судить, схема идентична для обеих баз данных:
Локальная таблица
CREATE TABLE [dbo].[AT5600VerHeader] (
[VerificationID] INT IDENTITY (0, 1) NOT NULL,
[NodeID] INT DEFAULT ((-1)) NOT NULL,
[CertificateNumber] NVARCHAR (50) NOT NULL,
[IsPreCalibration] BIT DEFAULT ((0)) NULL,
[VerStart] DATETIME NOT NULL,
[VerEnd] DATETIME NULL,
[AT5600_SN] NVARCHAR (20) NOT NULL,
[AT5600_FW] NVARCHAR (20) NOT NULL,
[AT5600_HW] NVARCHAR (20) NOT NULL,
[Software_Version] NVARCHAR (20) NOT NULL,
[DMM_SN] NVARCHAR (20) NOT NULL,
[DMM_CalCert] NVARCHAR (50) NOT NULL,
[DMM_CalDate] DATE NOT NULL,
[VerFixture_SN] NVARCHAR (20) NOT NULL,
[VerFixture_CalDate] DATE NOT NULL,
[VerFixture_CalCert] NVARCHAR (50) NOT NULL,
[LCR_SN] NVARCHAR (20) DEFAULT ('Not Available') NOT NULL,
[LCR_CalCert] NVARCHAR (50) DEFAULT ('Not Available') NOT NULL,
[LCR_CalDate] DATE DEFAULT (CONVERT([date],'1900-01-01',(0))) NOT NULL,
[VerificationState] INT DEFAULT ((0)) NULL,
[AT5600_CalDate] DATETIME NULL,
[Company_Name] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address1] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address2] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address3] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
CONSTRAINT [PK_AT5600VerHeader] PRIMARY KEY CLUSTERED ([VerificationID] ASC, [NodeID] ASC),
CONSTRAINT [FK_AT5600VerHeader_Nodes] FOREIGN KEY ([NodeID]) REFERENCES [dbo].[Nodes] ([NodeID]),
CONSTRAINT [CONSTRAINT_VerificationState] FOREIGN KEY ([VerificationState]) REFERENCES [dbo].[AT5600VerState] ([Id]));
Удаленная таблица
CREATE TABLE [dbo].[AT5600VerHeader] (
[VerificationID] INT IDENTITY (0, 1) NOT NULL,
[NodeID] INT DEFAULT ((-1)) NOT NULL,
[CertificateNumber] NVARCHAR (50) NOT NULL,
[IsPreCalibration] BIT DEFAULT ((0)) NULL,
[VerStart] DATETIME NOT NULL,
[VerEnd] DATETIME NULL,
[AT5600_SN] NVARCHAR (20) NOT NULL,
[AT5600_FW] NVARCHAR (20) NOT NULL,
[AT5600_HW] NVARCHAR (20) NOT NULL,
[Software_Version] NVARCHAR (20) NOT NULL,
[DMM_SN] NVARCHAR (20) NOT NULL,
[DMM_CalCert] NVARCHAR (50) NOT NULL,
[DMM_CalDate] DATE NOT NULL,
[VerFixture_SN] NVARCHAR (20) NOT NULL,
[VerFixture_CalDate] DATE NOT NULL,
[VerFixture_CalCert] NVARCHAR (50) NOT NULL,
[LCR_SN] NVARCHAR (20) DEFAULT ('Not Available') NOT NULL,
[LCR_CalCert] NVARCHAR (50) DEFAULT ('Not Available') NOT NULL,
[LCR_CalDate] DATE DEFAULT (CONVERT([date],'1900-01-01',(0))) NOT NULL,
[VerificationState] INT DEFAULT ((0)) NULL,
[AT5600_CalDate] DATETIME NULL,
[Company_Name] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address1] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address2] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
[Company_Address3] NVARCHAR (50) DEFAULT ('PLACEHOLDER') NOT NULL,
CONSTRAINT [PK_AT5600VerHeader] PRIMARY KEY CLUSTERED ([VerificationID] ASC, [NodeID] ASC),
CONSTRAINT [CONSTRAINT_VerificationState] FOREIGN KEY ([VerificationState]) REFERENCES [dbo].[AT5600VerState] ([Id]),
CONSTRAINT [CONSTRAINT_Node] FOREIGN KEY ([NodeID]) REFERENCES [dbo].[Nodes] ([NodeID]));
Буду признателен за любые указания относительно того, что может пойти не так или за советы по устранению проблемы. Спасибо!