使用C#还原数据库

时间:2011-08-04 14:23:14

标签: c# sql

我正在尝试使用Microsoft.SqlServer.Management.Smo将数据库从一台服务器还原到另一台服务器。问题是我一直收到一条错误,指出它无法找到.MDF文件。这样做的原因是它试图在SQL的实例名称的数据文件夹中找到它,而不是查看另一个SQL实例的数据文件夹。有没有办法告诉它哪个文件夹搜索mdf而不是假设它是标记为BAK文件的文件夹?这太令人沮丧了

2 个答案:

答案 0 :(得分:1)

看看Bappi M Ahmed的article。它显示了还原数据库文件的完整方法。这是它显示的方法:

public void RestoreDatabase(String databaseName, String filePath, 
       String serverName, String userName, String password, 
       String dataFilePath, String logFilePath)
{
    Restore sqlRestore = new Restore();

    BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;

    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);

    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = dataFilePath + databaseName + ".mdf";
    String logFileLocation = logFilePath + databaseName + "_Log.ldf";
    db = sqlServer.Databases[databaseName];
    RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);

    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName+"_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.PercentCompleteNotification = 10;
    sqlRestore.PercentComplete += 
       new PercentCompleteEventHandler(sqlRestore_PercentComplete);

    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}

答案 1 :(得分:0)

也许您必须将RelocateFile个对象添加到RelocateFiles对象上的Restore ArrayList属性中。你试过这个吗?