c# - 如何使用 Microsoft.SqlServer.Management.Smo 命名空间的还原类进行还原

标签 c# sql-server-2005

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;
    String logFileLocation = logFilePath; 
    db = sqlServer.Databases[databaseName];
    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.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}

调用此方法时,还原操作失败并显示此消息

Restore failed for Server 'MDM04\SQLEXPRESS'.

mdm04 是我的电脑名

内部异常是

"System.Data.SqlClient.SqlError: Logical file 'vrv' is not part of database 'vrv'. Use RESTORE FILELISTONLY to list the logical file names."

vrv 是数据库名

我应该怎么做才能恢复文件

最佳答案

问题来了

sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFileLocation));

这里的databaseName 表示db 备份文件中指定的数据库的名称。但是您正在指定目标数据库名称。

改成原来的数据库名

这里是从备份文件中读取数据库名称的示例代码

DataTable dtFileList = sqlRestore.ReadFileList(serverName);
string dbLogicalName = dtFileList.Rows[0][0].ToString();
string dbPhysicalName = dtFileList.Rows[0][1].ToString();
string logLogicalName = dtFileList.Rows[1][0].ToString();
string logPhysicalName = dtFileList.Rows[1][1].ToString

关于c# - 如何使用 Microsoft.SqlServer.Management.Smo 命名空间的还原类进行还原,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3861981/

相关文章:

sql-server-2005 - 我应该向小表添加索引吗?

c# - ASP.NET:如何在不写用户名的情况下将最新的新闻和杂志添加到 Web 应用程序

c# - 如何从 javascript 调用 c# 按钮单击方法?

c# - 如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 到 C#)?

c# - 在 ASP.NET 中使用复选框启用文本框?

sql-server - 如何统计SQL Server 2005数据库中每个表的每条记录?

c# - 关于 C# Static Readonly 成员

sql - 如何从列的值中删除双引号?

sql-server - SQL Server 2005 复制

sql - SSDT 项目发布在 PostDeploy 中的 unicode 上失败 - 有任何解决方法或配置来解决此问题吗?