我设法编写了一个允许我备份SQL Server数据库的功能,但我正在努力尝试恢复和使用备份版本。
我的代码:
Try
Dim confirmBackUp As MsgBoxResult
confirmBackUp = MsgBox("Are you sure you want to restore?")
If confirmBackUp = MsgBoxResult.Yes Then Else Exit Sub
Dim cmd As New OleDbCommand
con = New OleDbConnection()
' con.Connectionstring is read from an .ini file, but the string is correct
con.Open()
cmd.CommandType = CommandType.Text
cmd.CommandText = "RESTORE DATABASE MaintenanceControl FROM DISK='c:\Program Files\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\Backup\MaintenanceControl.bak'"
cmd.Connection = con
cmd.ExecuteNonQuery()
MsgBox("Database Restored", MsgBoxStyle.OkOnly, "Success")
con.Close()
Catch ex As Exception
errorLog(ex.Message, ex.StackTrace)
MsgBox("Could not restore database, refer to error log")
End Try
但在.ExecuteNonQuery()
行,我收到以下错误;
RESTORE DATABASE正在异常终止。
RESTORE无法处理数据库' MaintenanceControl'因为它在本次会议中使用。建议在执行此操作时使用master数据库。
问题是什么?是因为con也是实时数据库连接的名称,它不应该被赋予新的字符串吗?
修改
我现在将连接的Initial Catalog
部分设置为' Master',并在con = New OleDbconnection
之前添加了con.Close()但是我现在的错误得到了
RESTORE DATABASE异常终止。 由于数据库正在使用,因此无法获得独占访问权。
答案 0 :(得分:0)
如果您可以删除并重新创建数据库,则可以使用此语句,这样您就可以删除它:
alter database MaintenanceControl set single_user with rollback immediate;
drop database SomeDatMaintenanceControl base;
然后根据需要从头开始创建数据库。
删除数据库会破坏数据库,以便在您尝试恢复时不会有人连接到该数据库。然后你干净地创建数据库。