2012-01-15 6 views
-2

ШАГ 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

не вызывает никакой ошибки ... любая идея, где я иду не так? –

+0

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

ответ

0

Я считаю, что ваша проблема в том, что вы пытаетесь использовать путь базы данных в своих операторах 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 
Смежные вопросы