Эти ошибки, вероятно, являются результатом локали, из которой устанавливается свойство Backup.ExpirationDate
. В зависимости от культуры, в которой он выполняется, метод DateTime.AddDays
может увеличивать месяц вместо дня, как ожидалось, что приводит к противоречивым результатам, которые вы видели. Из значений, которые вы тестировали, только отрицательные должны вызывать ошибки, так как диапазон дней для срока действия резервной копии составляет 0 - 99999, при этом 0 указывает, что срок действия резервной копии никогда не истечет, как указано в документации . Попробуйте использовать класс CultureInfo
для определения новой локали, а затем установите срок действия. Для этого потребуется ссылка на пространство имен System.Globalization
. Выполнение следующего кода не дало мне никаких ошибок при установке даты истечения срока действия в операции резервного копирования с использованием культуры США (en-US
). Просто убедитесь, что дата в культуре, которую вы конвертируете, совпадает с датой, которую вы ожидаете в своем часовом поясе.
using System.Globalization;
string folderPath = @"C:\YourFolder\";
Server serv = new Server(@"YourServer");
Backup bkup = new Backup();
bkup.Database = "YourDatabase";
string bkupFilePath = folderPath + bkup.Database.ToString() + ".bak";
bkup.Action = BackupActionType.Database;
bkup.Devices.AddDevice(bkupFilePath, DeviceType.File);
bkup.BackupSetName = "YourDatabase Full Backup";
bkup.BackupSetDescription = "Full backup of YourDatabase";
DateTime today = DateTime.Now;
//define current date representation with en-US culture
string newLocale = today.ToString(new CultureInfo("en-US"));
//set Backup.ExpirationDate to use new culture
bkup.ExpirationDate = Convert.ToDateTime(newLocale);
bkup.ExpirationDate.AddDays(10);
bkup.ExpirationDate.AddDays(100);
bkup.ExpirationDate.AddDays(500);
bkup.ExpirationDate.AddDays(1000);
bkup.SqlBackup(serv);