我有一个在 VB.NET 和 SQL Server 2012 LocalDB (v11) 中开发的项目,我需要在我的应用程序中使用备份/恢复工具。备份部分已完成,但我被困在恢复部分。这是我想要工作的查询(在 SQL 编辑器中工作正常)
ALTER DATABASE [<.MDF File Path>]
SET SINGLE_USER WITH ROLLBACK IMMEDIATE
RESTORE DATABASE [<.MDF File Path] FROM DISK='<.bak File Path'
这是我试图执行的 VB.NET 中的代码
Sub Restorequery(ByVal que As String)
MainForm.Conn.Close()
con = New SqlConnection("Data Source=(LocalDB)\v11.0;Database=Master;integrated security=True;")
If Not con.State = ConnectionState.Open Then con.Open()
cmd = New SqlCommand(que, con)
cmd.ExecuteNonQuery()
End Sub
这是我迄今为止尝试过的方法
使用与上面相同的查询
Restorequery("ALTER DATABASE [<.MDF File Path>] SET SINGLE_USER WITH ROLLBACK IMMEDIATE") Restorequery("restore database [<.MDF File Path>] from disk='<.bak File Path>'")
这会导致错误
无法获得独占访问权限,因为数据库正在使用中。RESTORE DATABASE 异常终止。
在找到上述问题的原因后(即使在
master
打开连接并关闭所有先前打开的连接时使用数据库也是无稽之谈MainForm.Conn.Close()
),我根据 Stackoverflow 的一些链接和参考尝试了第二种方法。以下是我尝试过的查询:Restorequery("use [master] ") Restorequery("alter database [<.MDF File Name>] set single_user with rollback immediate") Restorequery("restore database[<.MDF File Name>] from disk='<.bak File Name>'") Restorequery("alter database [<.MDF File Name>] set multi_user") Restorequery("use [<.MDF File Name>]")
这是我在执行第二个查询时遇到的错误:
附加信息:用户无权更改数据库<.MDF File Name with Path>,数据库不存在,或数据库未处于允许访问检查的状态。ALTER DATABASE 语句失败。
有没有其他方法可以使用 VB.NET 恢复 SQL Server LocalDB?