【发布时间】:2022-01-05 02:36:40
【问题描述】:
我想恢复一个 SQL Server localdb 数据库。我试过这段代码:
Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
Dim ofd As New OpenFileDialog() With
{
.Filter = "Backup file | *.bak",
.FileName = ""
}
If ofd.ShowDialog = System.Windows.Forms.DialogResult.OK Then
Cursor = Cursors.WaitCursor
Dim csb = New SqlConnectionStringBuilder("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\CHAKER\Documents\RestoDB.mdf;Integrated Security=True;Connect Timeout=30")
Dim dbFullPath = csb.AttachDBFilename
Dim sql = String.Format("RESTORE DATABASE ""{0}"" From DISK = '{1}'", dbFullPath, ofd.FileName)
Dim cmd As New SqlCommand(sql, con)
cmd.ExecuteNonQuery()
MsgBox("Restore complete")
Cursor = Cursors.Default
End If
End Sub
我得到了这个例外:
RESTORE 无法处理数据库“C:\Users\CHAKER\Documents\RestoDB.mdf”,因为该会话正在使用它。建议执行此操作时使用master数据库。
【问题讨论】:
-
您是否尝试将“Initial Catalog=master”添加到您的连接字符串?
-
@DanGuzman 我尝试使用“Initial Catalog=master”得到同样的异常
-
我看不到您在哪里声明和打开连接。在执行还原之前尝试
con.ChangeDatabase("master")。 -
代码中所有打开数据库连接的地方都必须在使用完毕后关闭它(并在连接上调用
.Dispose())。你不应该有一个全局 con 变量。您可以看到我在this answer 中的模式,虽然它使用 OleDbConnection 而不是 SqlConnection 等。 -
@AndrewMorton 我尝试 con.ChangeDatabase("master") 我得到这个异常附加信息:要恢复主数据库,服务器必须在单用户模式下运行。有关以单用户模式启动的信息,请参阅联机丛书中的“如何:启动 SQL Server 实例 (sqlservr.exe)”。
标签: sql sql-server vb.net sql-server-2012-localdb