SyncOrchestrator.Synchronize (), выбрасывающий исключение FormatException - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь использовать 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]));

Буду признателен за любые указания относительно того, что может пойти не так или за советы по устранению проблемы. Спасибо!

...