Резервное копирование SQL с помощью SMO & C #? - PullRequest
0 голосов
/ 17 октября 2010

Я использую следующий код для резервного копирования базы данных SQL:

void BackupDatabase(string sConnect, string dbName, string backUpPath)
{
    using (SqlConnection cnn = new SqlConnection(sConnect))
    {
        cnn.Open();
        dbName = cnn.Database.ToString();

        ServerConnection sc = new ServerConnection(cnn);
        Server sv = new Server(sc);

        // Create backup device item for the backup
        BackupDeviceItem bdi = new BackupDeviceItem(backUpPath, DeviceType.File);

        // Create the backup informaton
        Microsoft.SqlServer.Management.Smo.Backup bk = new Backup();
        bk.PercentComplete += new PercentCompleteEventHandler(percentComplete);
        bk.Devices.Add(bdi);
        bk.Action = BackupActionType.Database;
        bk.PercentCompleteNotification = 1;
        bk.BackupSetDescription = dbName;
        bk.BackupSetName = dbName;
        bk.Database = dbName;
        //bk.ExpirationDate = DateTime.Now.AddDays(30);
        bk.LogTruncation = BackupTruncateLogType.Truncate;
        bk.FormatMedia = false;
        bk.Initialize = true;
        bk.Checksum = true;
        bk.ContinueAfterError = true;
        bk.Incremental = false;

        // Run the backup
        bk.SqlBackup(sv);
    }
}

В моей системе (Win7 x64) он работает нормально, но в целевой системе (WinXP SP3 x86) я получаю сообщение об ошибке ниже:

Exception



Как я могу это исправить?
Спасибо.

Ответы [ 2 ]

1 голос
/ 17 октября 2010

Если вы посмотрите каталог сборки на машине Win7 (GAC), вы увидите запись с именем Microsoft.SqlServer.ConnectionInfo.(Перейти к %windir%\assembly) На моей машине это выглядит так:

alt text

В моем случае я использую версию 10.0.0.0.В вашем случае вы по крайней мере увидите версию 9.0.242.0, так как именно это ваша программа скомпилирована (я считаю маловероятным, что вы не ссылаетесь на DLL из GAC).Если у вас не установлена ​​одна и та же версия на обоих компьютерах, вы обнаружили проблему, и вам необходимо соответствующим образом обновить клиентскую библиотеку.Я думаю, вероятно, что у вас установлена ​​более новая версия на компьютере с XP, поскольку вы только что установили 2008 год там.

Если после проверки вам понадобится дополнительная помощь, вы можете оставить комментарий.

1 голос
/ 17 октября 2010

SQL-сервера для 32-битных и 64-битных серверов SQL разные.

Похоже, ваш проект ссылается на 64-битные DLL. Когда вы пытаетесь запустить его на компьютере с 32-битными доступными dll, вы получаете ошибку типа «файл не найден» / «не удалось загрузить dll».

Если вы хотите, чтобы это работало на 32-битной машине, вам следует обратиться к 32-битной версии DLL-сервера SQL Server.

...