2013-04-06 15 views
5

BackupSQL Server Backup & Restore

string connectionString1 = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database1.mdf;Database=Database1;Integrated Security=True; User Instance=True"); 
      SqlConnection cn = new SqlConnection(connectionString1); 
      cn.Open(); 
      SqlCommand cmd = new SqlCommand(); 
      SqlDataReader reader; 
      cmd.CommandText = @"BACKUP DATABASE Database1 TO DISK = 'C:\SRI2Works.bak'"; 

      cmd.CommandType = CommandType.Text; 
      cmd.Connection = cn; 
      reader = cmd.ExecuteReader(); 
      cn.Close(); 
      MessageBox.Show("Database Backup Successfull."); 

wiederherstellen

string connectionString1 = (@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Database1.mdf;Database=Database1;Integrated Security=True; User Instance=True"); 
      SqlConnection cn = new SqlConnection(connectionString1); 
      cn.Open(); 

      SqlCommand cmd = new SqlCommand(); 
      SqlDataReader reader; 
      cmd.CommandText = @"use master; RESTORE DATABASE Database1 FROM DISK = 'C:\SRI2Works.bak'"; 
      cmd.CommandText = "DBCC CHECKDB ('Database1')"; 
      cmd.CommandType = CommandType.Text; 
      cmd.Connection = cn; 
      reader = cmd.ExecuteReader(); 
      cn.Close(); 
      MessageBox.Show("Database Restored Successfull."); 

Dieser Code wird erfolgreich ausgeführt hat, aber keine Änderungen vornehmen.

+0

erstellt werden Wie haben Sie überprüft, dass der Code tatsächlich ausgeführt wurde? Hat das Meldungsfeld ausgelöst? – usr

+0

Wird die Datei 'C: \ SRI2Works.bak' tatsächlich geschrieben? Und so, wie es ist, führt Ihr Wiederherstellungsbefehl nur 'DBCC CHECKDB ('Database1') 'aus, das den' CommandText' ersetzt, der in der obigen Zeile gesetzt ist. –

+0

@ ThomasGerstendörfer guter Fang! Das OP sollte SQL Profiler verwenden, um zu überprüfen, ob die erwarteten Befehle tatsächlich gesendet werden. – usr

Antwort

0

zum Beispiel haben wir 2 Menüleiste; eine für die Sicherung und die andere für die Wiederherstellung, so dass sie ihre Methoden ausführen! Versuchen Sie folgendes:

private void saveDatabaseToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      BackupDatabase(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message + " \nPlease choose the folder Sauvegardes to backup !"); 
     } 

    } 
    private void restoreDatabaseToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      RestoreDatabase(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    private void BackupDatabase() 
    { 
     saveFileDialogBackUp.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"Sauvegardes"; 
     if (saveFileDialogBackUp.ShowDialog() == DialogResult.OK) 
     { 
      Con.ExecuteCmd("BACKUP DATABASE MyFooDatabase TO DISK = '" + saveFileDialogBackUp.FileName + "'"); 
      MessageBox.Show("Success , done!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
    } 
    private void RestoreDatabase() 
    { 
     openFileDialogBackUp.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory + @"Sauvegardes"; 
     if (openFileDialogBackUp.ShowDialog() == DialogResult.OK) 
     { 
      Con.ExecuteCmd(" USE MASTER RESTORE DATABASE MyFooDatabase FROM DISK = '"+openFileDialogBackUp.FileName+"' WITH REPLACE"); 
      MessageBox.Show("Database Restored", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 

    } 
0

Entfernen Sie die folgende Anweisung aus dem Code:

cmd.CommandText = "DBCC CHECKDB ('Database1')"; 

Und wenn Sie die vorhandene Datenbank verwenden Sie den folgenden Befehl für Commandtext überschrieben werden soll:

cmd.CommandText = @"use master; RESTORE DATABASE Database1 FROM DISK = 'C:\SRI2Works.bak' WITH REPLACE"; 
6

Versuchen Sie, diese Code in Restore-Datenbank:

private void restoreButton_Click(object sender, EventArgs e) 
    { 
    string database = con.Database.ToString(); 
    if (con.State != ConnectionState.Open) 
    { 
     con.Open(); 
    } 
    try 
    { 
     string sqlStmt2 = string.Format("ALTER DATABASE [" + database + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE"); 
     SqlCommand bu2 = new SqlCommand(sqlStmt2, con); 
     bu2.ExecuteNonQuery(); 

     string sqlStmt3 = "USE MASTER RESTORE DATABASE [" + database + "] FROM DISK='" + textBox2.Text + "'WITH REPLACE;"; 
     SqlCommand bu3 = new SqlCommand(sqlStmt3, con); 
     bu3.ExecuteNonQuery(); 

     string sqlStmt4 = string.Format("ALTER DATABASE [" + database + "] SET MULTI_USER"); 
     SqlCommand bu4 = new SqlCommand(sqlStmt4, con); 
     bu4.ExecuteNonQuery(); 

     MessageBox.Show("database restoration done successefully"); 
     con.Close(); 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

Für weitere Erklärung lesen Sie in diesem Tutorial: Backup & Restore Sql Server database using C#

+0

Es war fantastisch. Habe meine Zeit gerettet. und +1 für Referenzlink auch :) – Mehmood

0
RESTORE DATABASE [C] FROM DISK = 'D:\\Inventory.bak' WITH RECOVERY, 
MOVE 'Inventory_Data' 
TO 'C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\c_Data.MDF', 
MOVE 'Inventory_Log' 
TO 
'C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\c_Log.LDF', 
REPLACE, stats =1 

Das einzige, was Sie kümmern haben, wiederherstellen Datenbank in MS SQL Server nicht erstellt. In meinem Fall sollte nach dem Ausführen der Abfrage eine neue Datenbank mit dem Namen [C] erstellt werden und ihre Datei im Pfad [C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\]