【问题标题】:Backup SQL Server localdb in vb.net在 vb.net 中备份 SQL Server localdb
【发布时间】: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")

【问题讨论】:

    标签: sql-server vb.net


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      相关资源
      最近更新 更多