我有一个SQL 2008数据库。我正在运行一个支持该数据库的表单,然后尝试更新它。如果更新失败,则该想法是恢复该备份。这是我用来恢复备份的代码。如何从C#恢复数据库
public void RestoreDatabase(String databaseName, String backUpFile, String serverName, String userName, String password)
{
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(backUpFile, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
sqlRestore.Action = RestoreActionType.Database;
string logFile = System.IO.Path.GetDirectoryName(backUpFile);
logFile = System.IO.Path.Combine(logFile, databaseName + "_Log.ldf");
string dataFile = System.IO.Path.GetDirectoryName(backUpFile);
dataFile = System.IO.Path.Combine(dataFile, databaseName + ".mdf");
Database db = sqlServer.Databases[databaseName];
RelocateFile rf = new RelocateFile(databaseName, dataFile);
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFile));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFile));
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
}
这个问题似乎是,文件名我选是从在线DB不同。我基本上想用备份替换服务器上的数据库。我调用SqlRestore时遇到异常。
主要的例外说
{ “恢复失败的服务器 'localhost' 的。”}
挖掘到内部异常显示这些错误
发生异常同时执行Transact-SQL语句或批处理的 。
然后
逻辑文件 'DB' 是不是 数据库 'DB' 的一部分。使用RESTORE FILELISTONLY列出逻辑文件 名称。\ r \ nRESTORE DATABASE为 异常终止。
我认为有一些方法可以告诉它只是使用替换现有的数据库。
我使用这一段代码来获取数据库的文件路径,使其具有转储备份的目录。也许这可以用来获取文件名称来重新创建。
public string GetDBFilePath(String databaseName, String userName, String password, String serverName)
{
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
return sqlServer.Databases[databaseName].PrimaryFilePath;
}
如果您从同一机器上的相同数据库的备份进行恢复,则不需要重定位文件。只有在通过备份/恢复移动和复制数据库时才需要重新定位。 – 2009-09-23 16:28:13
好的,这里有一些提示:关于备份文件路径,请务必注意,如果文件真的存在于源文件夹中。关于重定位,可能是写入mdf文件的权限问题。请注意,如果您的应用程序有权读取.bak文件,则在此情况下请检查SQL配置管理器:MSSQLServer服务必须在LocalSystem用户下运行。 – 2010-03-29 17:59:29