恢复SQL Server数据库的问题

时间:2011-08-30 12:56:22

标签: c# sql-server

我已经工作了好几个小时,试图找出为什么我无法使用我的C#应用​​程序来恢复SQL Server 2008数据库。 我使用以下代码:

var conn = new SqlConnection("SERVER=Server;DATABASE=master;User ID=sa;Pwd=Password");
var srvConn = new ServerConnection(conn);
var srv = new Server(srvConn);

Restore res = new Restore();
res.Database = "RestoredDatabase";
res.Action = RestoreActionType.Database;
res.Devices.AddDevice("Path to .bak-file", DeviceType.File);
res.ReplaceDatabase = false;
res.SqlRestore(srv);

当我运行代码时没有任何反应。没有错误或异常发生!我一直在网上寻找解决方案,但所有的例子都完全一样,所以没有帮助。

连接是否有问题,或者.bak文件可能有问题?

我很惊讶没有真正的调试功能,例如使用Microsoft.SqlServer.Management.Smo中的对象时的异常。

3 个答案:

答案 0 :(得分:1)

  • 首先,尝试使用管理工作室选项恢复数据库,使用相同的身份验证信息和相同的.BAK。如果它不起作用,则问题不在您的代码上。
  • 如果第一个实验工作正常,并且已经创建了数据库,请确保在启动恢复之前没有人连接到它。您可以在Sql Server中执行指令sp_who2,以确保没有与该数据库的连接。

答案 1 :(得分:1)

如果您愿意,也可以滚动自己的代码。我在一些集成测试中使用它来将数据库恢复到干净状态。我将数据库重置为单用户模式,因此如果有人连接到它 - 它将启动它们以便我可以恢复它。

StringBuilder sb = new StringBuilder();
sb.Append("ALTER DATABASE ");
sb.Append(" [");
sb.Append(databasename);
sb.Append("] ");
sb.Append(" SET SINGLE_USER WITH ROLLBACK IMMEDIATE;");
sb.Append("RESTORE DATABASE ");
sb.Append(" [");
sb.Append(databasename);
sb.Append("] ");
sb.Append(@" FROM DISK = N'D:\SQLBACKUPS\AUTOMATION\");
sb.Append(backupfilename);
sb.Append("' WITH FILE=1, NOUNLOAD, REPLACE, STATS=10");
return sb.ToString();

然后只需创建一个sql命令对象,并将字符串生成器的结果作为命令文本传递并执行。

答案 2 :(得分:0)

这可能是一些权限问题,因此有时也不会发生恢复。尝试首先使用您的本地数据库恢复“.bak”文件,该数据库可以使用您的用户名和密码访问。如何访问Sql BackupRestore站点以获取有关使用C#.net的Sql Backup的更多详细信息。希望它会对你有所帮助。