【问题标题】:Getting Error when Restoring SQL Database using VB.net使用 VB.net 恢复 SQL 数据库时出错
【发布时间】:2019-12-18 07:45:42
【问题描述】:

错误消息:无法获得独占访问权限,因为 数据库正在使用中。恢复数据库异常终止。

我的备份代码有效,但我不知道为什么此恢复代码无效。

Try
    Dim con2 As SqlConnection
    Dim com2 As SqlCommand
    Dim filename2 As String
    Dim strquery2 As String
    Dim database2 As String
    Dim get_servername2 As String

    'get the value selected in Database Name Dropdown Menu
    database2 = Database_NameComboBox.Text
    'get the value selected in Server Name Dropdown Menu
    get_servername2 = Server_NameComboBox.Text.Trim

    Dim opendlg As New OpenFileDialog
    Dim constr2 As String

    ' set SQL connection data source using default Master Database
    constr2 = "Data Source=" & get_servername2 & ";Initial Catalog=master;Integrated Security=SSPI"

    ' open SQL Database to restore
    If opendlg.ShowDialog = Windows.Forms.DialogResult.OK Then
        Me.Cursor = Cursors.WaitCursor
        con2 = New SqlConnection(constr2)
        con2.Open()
        filename2 = opendlg.FileName
        strquery2 = "Restore database " & database2 & " from disk='" & filename2 & "'"

        ' execute command
        Try
            com2 = New SqlCommand(strquery2, con2)
            com2.ExecuteNonQuery()
            MessageBox.Show("Database " & database2 & " has been Restored Successfully", "IBP Legal Aid Case Management System - Restore Database", MessageBoxButtons.OK, MessageBoxIcon.Information)
            con2.Close()
            Me.Server_NameComboBox.SelectedIndex = -1
            Me.Database_NameComboBox.SelectedIndex = -1
            Me.Database_NameComboBox.Enabled = False
            Me.Cursor = Cursors.Default
        Catch ex As Exception
            Me.Cursor = Cursors.Default
            MessageBox.Show(ex.Message)
        End Try

    End If

Catch ex As Exception
    Me.Cursor = Cursors.Default
    MessageBox.Show(ex.Message)
End Try

【问题讨论】:

  • 您可以打开另一个连接。例如,在您的 catch 块中,您不会关闭连接。看看如何使用 Using 语句 并在程序中随处更改代码模式
  • 您的代码对 sql 注入是开放的。学会正确地参数化你的代码——这个应用程序是否只在内部使用并不重要。养成良好的习惯。

标签: sql-server database vb.net restore


【解决方案1】:

restore 之前,您应该确保没有用户连接到此database,否则您会收到您发布的错误。

您可以先设置您的数据库offline,然后再恢复:

alter database MyDB set offline
with rollback immediate;

restore database ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多