C# 恢复SQL Server数据库时出现问题

C# 恢复SQL Server数据库时出现问题,c#,sql-server,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();

我已经工作了几个小时,试图弄明白为什么我的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中的对象时,没有真正的调试功能,例如异常。

这可能是一些权限问题,因此有时也不会发生还原。尝试先用您的用户名和密码访问的本地数据库还原“.bak”文件。任何关于如何使用C#.net进行Sql备份的详细信息,请访问该网站。希望对您有所帮助。

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

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

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命令对象,并将字符串生成器的结果作为命令文本传入并执行

是否尝试使用SQL进行恢复?您的恢复类是什么类?名称空间?尝试使用
ReplaceDatabase=true
-如果数据库还不存在,它不会有任何影响…您可能还想签出:还有一件事:驱动器上的*.bak文件是否连接到物理SQL Server??您需要在数据库应还原到的计算机上运行还原应用程序,*.bak文件必须对运行您的应用程序的帐户可用。@marc_s:Microsoft.SqlServer.Management.Smo.restore。我使用相同的命名空间/类创建具有相同用户/权限的.bak文件。应用程序未在与数据库相同的计算机上运行,但.bak文件位于“DB计算机”上。备份数据库后,请确保通过Sql server Management studio与Sql server的连接已关闭或未关闭,如果未关闭,则还原代码也将不起作用。