база данных остается пустой - PullRequest
0 голосов
/ 15 января 2012

ШАГ 1: Я создаю резервную копию базы данных, используя этот фрагмент кода (работает нормально)

Public Shared Sub BackupDatabase()
        Dim sConnect As String = My.Settings.LICConnectionString
        Dim dbName As String

        Using cnn As New SqlConnection(sConnect)
            cnn.Open()
            dbName = cnn.Database.ToString()

            Dim sc As New ServerConnection(cnn)
            Dim sv As New Server(sc)

            ' Check that I'm connected to the user instance
            Console.WriteLine(sv.InstanceName.ToString())

            ' Create backup device item for the backup
            Dim bdi As New BackupDeviceItem("C:\Backup\LIC.bak", DeviceType.File)

            ' Create the backup informaton
            Dim bk As New Backup()
            bk.Devices.Add(bdi)
            bk.Action = BackupActionType.Database
            bk.BackupSetDescription = "SQL Express is a great product!"
            bk.BackupSetName = "SampleBackupSet"
            bk.Database = dbName
            bk.ExpirationDate = New Date(2007, 5, 1)
            bk.LogTruncation = BackupTruncateLogType.Truncate

            ' Run the backup
            bk.SqlBackup(sv)
            MsgBox("Your backup is complete.")
        End Using
    End Sub

ШАГ 2: Я удаляю все данные из таблиц (поэтому база данных пуста).

ШАГ 3: Восстановите базу данных из файла резервной копии, используя этот фрагмент кода (он не выдает никакой ошибки и работает нормально)

 Private Sub Restore(ByVal ConnectionString As String, ByVal DatabaseFullPath As String, ByVal backUpPath As String)
        Using con As New SqlConnection(ConnectionString)
            con.Open()

            Dim UseMaster As String = "USE master"
            Dim UseMasterCommand As New SqlCommand(UseMaster, con)
            UseMasterCommand.ExecuteNonQuery()

            Dim Alter1 As String = "ALTER DATABASE [" & DatabaseFullPath & "] SET Single_User WITH Rollback Immediate"
            Dim Alter1Cmd As New SqlCommand(Alter1, con)
            Alter1Cmd.ExecuteNonQuery()

            Dim Restore As String = "RESTORE DATABASE [" & DatabaseFullPath & "] FROM DISK = N'" & backUpPath & "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10"
            Dim RestoreCmd As New SqlCommand(Restore, con)
            RestoreCmd.ExecuteNonQuery()

            Dim Alter2 As String = "ALTER DATABASE [" & DatabaseFullPath & "] SET Multi_User"
            Dim Alter2Cmd As New SqlCommand(Alter2, con)
            Alter2Cmd.ExecuteNonQuery()

            MsgBox("Successful")
        End Using
    End Sub

Но он не показывает данные в таблицах ...я имею в виду, что после восстановления базы данных я должен получить старые данные из файла резервной копии ... но таблицы базы данных остаются пустыми.

Можете ли вы мне помочь в этом ??

1 Ответ

0 голосов
/ 16 января 2012

Я полагаю, что ваша проблема в том, что вы пытаетесь использовать путь базы данных в своих операторах SQL, а не имя базы данных.

Предполагая, что строка подключения открывает базу данных, в которую вы хотите восстановить изначально,метод восстановления можно переписать следующим образом:

Private Sub Restore(ByVal ConnectionString As String, ByVal DatabaseFullPath As String, ByVal backUpPath As String)
    Using con As New SqlConnection(ConnectionString)
        con.Open()

        Dim sDatabaseName As String

        sDatabaseName = con.Database

        Dim UseMaster As String = "USE master"
        Dim UseMasterCommand As New SqlCommand(UseMaster, con)
        UseMasterCommand.ExecuteNonQuery()

        Dim Alter1 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Single_User WITH Rollback Immediate"
        Dim Alter1Cmd As New SqlCommand(Alter1, con)
        Alter1Cmd.ExecuteNonQuery()

        Dim Restore As String = "RESTORE DATABASE [" & sDatabaseName & "] FROM DISK = N'" & backUpPath & "' WITH  FILE = 1,  NOUNLOAD,  STATS = 10"
        Dim RestoreCmd As New SqlCommand(Restore, con)
        RestoreCmd.ExecuteNonQuery()

        Dim Alter2 As String = "ALTER DATABASE [" & sDatabaseName & "] SET Multi_User"
        Dim Alter2Cmd As New SqlCommand(Alter2, con)
        Alter2Cmd.ExecuteNonQuery()

        MsgBox("Successful")
    End Using
End Sub
...