如何通过C#代码恢复SQL Server数据库

我尝试像这样恢复数据库:

SQL = @"RESTORE DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'"; Cmd = new SqlCommand(SQL, Conn); Cmd.ExecuteNonQuery(); Cmd.Dispose(); 

但我总是得到错误:

Msg 3102,Level 16,State 1,Line 7
RESTORE无法处理数据库’MyDataBase’,因为此会话正在使用它。 建议在执行此操作时使用master数据库。
Msg 3013,Level 16,State 1,Line 7
RESTORE DATABASEexception终止。

我更喜欢使用SMO来恢复备份:

 Microsoft.SqlServer.Management.Smo.Server smoServer = new Server(new ServerConnection(server)); Database db = smoServer.Databases['MyDataBase']; string dbPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase.mdf'); string logPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase_Log.ldf'); Restore restore = new Restore(); BackupDeviceItem deviceItem = new BackupDeviceItem('d:\MyDATA.BAK', DeviceType.File); restore.Devices.Add(deviceItem); restore.Database = backupDatabaseTo; restore.FileNumber = restoreFileNumber; restore.Action = RestoreActionType.Database; restore.ReplaceDatabase = true; restore.SqlRestore(smoServer); db = smoServer.Databases['MyDataBase']; db.SetOnline(); smoServer.Refresh(); db.Refresh(); 

您将需要对Microsoft.SqlServer.Smo,Microsoft.SqlServer.SmoExtended和Microsoft.SqlServer.Management.Sdk.Sfc的引用。

您的数据库连接最有可能是您尝试还原的数据库。 因此,有一个数据库共享锁可以阻止数据库的恢复

试试这个

 SQL = @"USE master BACKUP DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'"; 

或者更改连接详细信息以使用主数据库

您必须通过其他数据库连接到数据库服务器。

因此,您的连接字符串应该让您在服务器上说“Master”或其他数据库,然后您就可以完成手头的任务。

您的连接字符串应具有master数据库作为要连接的默认目录。