在 vb.net 中备份 SQL Server localdb

Posted

技术标签:

【中文标题】在 vb.net 中备份 SQL Server localdb【英文标题】:Backup SQL Server localdb in vb.net 【发布时间】:2021-12-31 09:27:12 【问题描述】:

我想制作我的 SQL Server localdb 数据库的备份副本。我试过这段代码:

Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    Dim Sfd As New SaveFileDialog() With 
        .Filter = "Backup file | *.bak",
        .FileName = ""
    

    If Sfd.ShowDialog = System.Windows.Forms.DialogResult.OK Then
            Cursor = Cursors.WaitCursor

            Dim dbname As String = "RestoDB.mdf"
            Dim sql As String = "Backup database [" + System.Windows.Forms.Application.StartupPath + "\RestoDB.mdf] To DISK = 'Sfd.Filename'"
            Dim cmd As New SqlCommand(sql, con)
            cmd.ExecuteNonQuery()
            MsgBox("Backup complete")
            Cursor = Cursors.Default
        End If

    End Sub

我收到一个错误提示

不存在。确保名称输入正确。

这是连接字符串:

Private con As New SqlClient.SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\CHAKER\Documents\RestoDB.mdf;Integrated Security=True;Connect Timeout=30")

【问题讨论】:

【参考方案1】:

System.Windows.Forms.Application.StartupPath 不太可能(也不应该是这种情况)是“C:\Users\CHAKER\Documents”。

您可以做的是获取当前用户的文档文件夹并使用它来构建数据库文件的完整路径:

Dim dbName As String = "RestoDB.mdf"
Dim dbFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
Dim dbFullPath = Path.Combine(dbFolder, dbName)
Dim sql = $"Backup database ""dbFullPath"" TO DISK = 'Sfd.Filename'"

(我看到的示例在数据库参数周围使用了双引号,而不是方括号。)

但最好使用连接字符串中的值:

Dim csb = New SqlConnectionStringBuilder("yourConnectionString")
Dim dbFullPath = csb.AttachDBFilename
Dim sql = $"Backup database ""dbFullPath"" TO DISK = 'Sfd.Filename'"

如果连接字符串存储在变量中,如果需要编辑,只需在一处更改即可。

如果你使用的是引入字符串插值之前的VB版本,你可以使用

Dim sql = String.Format("Backup database ""0"" TO DISK = '1'", dbFullPath, Sfd.Filename)

【讨论】:

我收到此异常 数据库“dbFullPath”不存在。确保输入的名称正确。我试过你的第二个代码我想问你关于美元符号我使用 VS 2013 所以我收到一条消息字符无效 @Chaker 我已经编辑了答案以展示如何使用 String.Format。 代码正在运行,谢谢 @Chaker 不客气 :) (在 Stack Overflow 上,无需使用您最终使用的代码添加答案。)【参考方案2】:

我使用此代码进行备份

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim Sfd As New SaveFileDialog() With 
.Filter = "Backup file | *.bak",
.FileName = ""

        If Sfd.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("Backup database ""0"" TO DISK = '1'", dbFullPath, Sfd.FileName)
            Dim cmd As New SqlCommand(sql, con)
            cmd.ExecuteNonQuery()
            MsgBox("Backup complete")
            Cursor = Cursors.Default
        End If

    End Sub

【讨论】:

以上是关于在 vb.net 中备份 SQL Server localdb的主要内容,如果未能解决你的问题,请参考以下文章

从 VB.NET 中的 SQL Server 中提取值

如何在 vb.net、SQL Server 中为多个搜索制作代码

SQL 查询字符串在 SQL Server Management Studio 中有效,但在带有 SQLCommand.ExecuteReader 的 VB.net 中无效

SQL Server 存储过程并在 VB.NET 中执行

如何在 SQL Server 表中创建图像列并使用 VB 在 ASP.NET 中检索它

VB6/Microsoft Access/DAO 到 VB.NET/SQL Server... 有建议吗?