我尝试将数据库从联网的SQLServer复制到本地SQLExpress:
private void DoRestore()
{
if (!File.Exists(fileNach))
{
MessageBox.Show("Restore gescheitert " + fileNach);
return;
}
Restore res = new Restore();
Server srv = new Server(Environment.MachineName.ToString()+@"\SQLEXPRESS");
//MessageBox.Show("Ziel Server :"+srv.Name);
try
{
string fileName = @fileNach;
string databaseName = "Outdoor";
srv.KillAllProcesses(databaseName);
res.Database = databaseName;
res.Action = RestoreActionType.Database;
res.Devices.AddDevice(fileName, DeviceType.File);
res.ReplaceDatabase = true;
res.NoRecovery = true;
string odb;
string odblog;
odb = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.mdf";
odblog = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.ldf";
res.RelocateFiles.Add(new RelocateFile("Outdoor", odb));
res.RelocateFiles.Add(new RelocateFile("Outdoor_Log", odblog));
// restore starten
res.SqlRestore(srv);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}此代码在SQLExpress上启动恢复进程,但永远不会结束。将在目标目录中创建mdf和日志文件,但恢复未完成。
我也尝试了srv.KillAllProcesses(databaseName);,但没有结果。
在C#级别不会引发任何错误。
发布于 2012-02-24 17:28:43
你说它永远不会结束,是不是你看到你的代码完成了,但数据库却卡在了“恢复”模式中?如果是这样,我认为您希望使用recovery进行恢复,否则将使数据库无法运行。尝试将NoRecovery设置为false而不是true:
res.NoRecovery = false;来自here
恢复数据库。此选项相当于Transact-SQL RESTORE语句中的RECOVERY选项。
仅当没有要还原的日志文件时才选择此选项。
使数据库处于未恢复状态。此选项等效于在Transact-SQL RESTORE语句中使用NORECOVERY选项。
选择此选项时,[保留复制设置]选项为unavailable.
https://stackoverflow.com/questions/9427578
复制相似问题