c# - 使用 SMO 备份数据库

标签 c# sql-server smo

我创建了一个类来备份数据库,代码是:

public bool BackupDatabase(string databasename)
        {
            bool success = false;

            try
            {
                Backup dbBackup = new Backup();

                string SqlInstance = @"SERVER\INSTANCE";
                string User = ExtractPureUsername(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
                string BackupLocation = @"\\SERVER\FOLDER\BACKUPTEST_" + User.ToString() + ".bak";

                Server srv = new Server(SqlInstance);

                dbBackup.Action = BackupActionType.Database;
                dbBackup.Database = databasename;
                dbBackup.Devices.AddDevice(BackupLocation, DeviceType.File);
                dbBackup.BackupSetName = "Test database backup";
                dbBackup.ExpirationDate = DateTime.Today.AddDays(10);
                dbBackup.Initialize = false;
                dbBackup.PercentComplete += CompletionStatusInPercent;
                dbBackup.Complete += Backup_Completed;

                dbBackup.SqlBackup(srv);

                success = true;
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadKey();
            }

            return success;
        }

这一直运行,我得到了错误:

Cannot open backup device - Operating System error 5

如果我要在引用的实例上运行备份,在 SSMS 中,我可以备份到指定的 Bakup 位置。所以我假设发生错误是因为备份是以运行 C# 程序的用户身份启动的,而 SQL Server 没有任何备份。有没有办法指定以哪个用户身份运行备份?

最佳答案

您可能必须在 SQL Server 计算机上将正确的文件名设置为本地路径。例如,不要使用 \\ServerName\Whatever,而是使用 c:\Whatever。确保您生成的文件名不包含非法字符,例如 \ 或其他内容。

关于c# - 使用 SMO 备份数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798407/

相关文章:

SQL Server 日期时间和 SQL

c# - 使用 GO 批处理分隔符执行 SQL 脚本并读取结果

c# - Vlc.DotNet NextFrame

c# - 序列化数组时去掉 <ArrayOfClassname> 根元素

python - sqlalchemy.exc.ArgumentError : columns argument to select() must be a Python list or other iterable

sql-server-2008 - Job.EnumHistory 使用 SQL Server 管理对象返回有关作业持续时间的错误信息

sql-server - 为什么 sqlConnection.Close() 不关闭登录?

C# 在 Canvas 中拖放图像

C#计算在const和variable locals之间有所不同?

java - 如何用java显示sql server中的数据 [android studio]