0

我创建了一个使用 SQL 数据库存储和查询数据的应用程序。一切都很好,但问题是备份它,经过大量搜索后,我找到了两种备份方式。首先,使用命令"use [Database Name] Backup database [Database Name] To Disk='[Backup Location]'。但是这种方法的问题是它需要在机器上安装 SSM 软件,但我不希望安装它,因为它允许用户拥有比他需要的数据库文件更多的控制权,所以如果有人可以给我对此的解决方案将非常有帮助。第二种方法是复制 .mdf 文件和 .ldf 文件,但问题是我不能直接从应用程序复制这些文件,甚至在应用程序打开时也不能间接复制,我们只能在关闭应用程序时复制它,但我没有我不想这样,我的主要问题集中在这个问题上。

我的问题。如何使用 VB.Net 编码直接从应用程序将这些文件从默认位置复制到备份位置而不关闭它?无论如何要关闭与这些文件的连接吗?

注意:我试过Connection.Close()Connection.Dispose()

4

1 回答 1

0

好的,所以在回答问题之前让我说点什么,我们大多数人都知道并在许多网站上看到第二种方法(复制 .mdf 和 .ldf 文件)是最不安全的方法,可能会导致可怕的问题,而第一种方法(使用 Transact-SQL 进行备份/还原)更可取、更方便,而且方法更安全。但我想很多人(尤其是像我这样的初学者)会遇到查询问题,use [DatabaseName] Backup database [DatabaseName] To Disk='[Backup Location]'因为数据库由两个文件(.mdf 和 .ldf)组成,所以这两个文件如何与这段代码一起使用。我找到的解决方案是添加initial catalog = [DatabaseName]到我的 ConnectionString 中,检查以下代码:

Dim connectionString As String = "Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=" + My.Settings.DBLocation + ";initial catalog=InvoiceDB;Integrated Security=True"

Sub Backup_Click()
    With SaveFileDialogue2
        .Title = "Select Backup Location"
        .Filter = "BAK File Only|*.bak"
        .FileName = "Backup " + Format(Now.ToString("dd MMM yyyy"))
        If SaveFileDialogue2.ShowDialog = DialogResult.OK Then
            If .FileName <> "" Then
                Dim BackupQuery As String
                BackupQuery = "Backup database [DatabaseName] To Disk='" + .FileName + "'"
                Using conn As New SqlConnection(connectionString)
                    Using comm As New SqlCommand()
                        With comm
                            .Connection = conn
                            .CommandType = CommandType.Text
                            .CommandText = BackupQuery
                        End With
                        Try
                            conn.Open()
                            comm.ExecuteNonQuery()
                            MsgBox("Backup Completed!", MsgBoxStyle.OkOnly, "Successful")
                            conn.Close()
                        Catch ex As SqlException
                            MessageBox.Show(ex.Message.ToString(), "Error Message")
                        Finally
                            conn.Dispose()
                        End Try
                    End Using
                End Using
            End If
        End If
    End With

End Sub

瞧,它奏效了!所以如果其他人有同样的问题,你可以试试这个......

注意:将 [DatabaseName] 更改为您的数据库名称并删除“[ ]”。我将此答案添加到另一个问题,因为它们相似,因此您可以关注任何人。单击此处转到另一个问题。

于 2017-02-19T06:52:54.507 回答