通过AttachDBFilename备份还原sql数据库

时间:2011-08-28 17:59:26

标签: c# sql-server backup

我无法创建保存在C:\database\mydb.mdf

等位置的数据库备份
  

错误:无法创建备份

        Backup sqlBackup = new Backup();

        sqlBackup.Action = BackupActionType.Database;
        sqlBackup.BackupSetDescription = "ArchiveDataBase:" +
                                         DateTime.Now.ToShortDateString();
        sqlBackup.BackupSetName = "Archive";

        sqlBackup.Database = databaseName;

        BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
        //ServerConnection connection = new ServerConnection(serverName, userName, password);
        ServerConnection connection = new ServerConnection(serverName);

        Server sqlServer = new Server(connection);

        Database db = sqlServer.Databases[databaseName];

        sqlBackup.Initialize = true;
        sqlBackup.Checksum = true;
        sqlBackup.ContinueAfterError = true;

        sqlBackup.Devices.Add(deviceItem);
        sqlBackup.Incremental = false;

        sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
        sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;

        sqlBackup.FormatMedia = false;

        sqlBackup.SqlBackup(sqlServer);   

 string dataBaseName = @"C:\database\mydb.mdf";    
 string serverName = @"Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True";    
 string destinationPath = "C:\\mydb.bak";    

也许我传递了错误的变量?

请任何人都可以验证并向我发布正确的解决方案

提前thnx。

PS:数据库没有密码保护,可以使用混合身份验证

1 个答案:

答案 0 :(得分:0)

首先 - 我猜你的一些参数是错误的:

ServerConnection connection = new ServerConnection(serverName);

在这里,您需要传递服务器的名称 - 所以在您的情况下,不要发送整个连接字符串 - 只需.\SQLExpress

至于您的数据库名称 - 我不知道您是否可以使用SMO备份SQL Server中的“附加”MDF文件 - 通常,这将是数据库名称(数据库的名称仅< / strong> - 没有文件名,没有扩展名)当数据库在服务器时。

string dataBaseName = @"C:\database\mydb.mdf";    

所以我的建议是:

  • 将此MDF文件附加到您的SQL Server实例(无论如何已安装)
  • 给它一个有意义的名字,例如mydb
  • 然后在此处使用数据库名称作为您的值:

    string dataBaseName = "mydb";      
    

有了这些点,你的代码在我的情况下可以正常工作,至少......