2013-04-06 6 views
5

di backupSQL e ripristinare

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."); 

ripristinare

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."); 

Questo codice viene eseguito correttamente, ma non apportare alcuna modifica.

+0

Come è stato verificato che il codice è stato effettivamente eseguito? La scatola del messaggio ha sparato? – usr

+0

Il file 'C: \ SRI2Works.bak' è effettivamente scritto? E, come è, il comando restore esegue solo 'DBCC CHECKDB ('Database1')' che sostituisce il 'CommandText' impostato nella riga sopra. –

+0

@ ThomasGerstendörfer buona cattura! L'OP deve utilizzare SQL Profiler per verificare che i comandi previsti siano effettivamente inviati. – usr

risposta

0

per esempio abbiamo 2 Menu Striscia; uno per il backup e l'altro per il ripristino in modo che eseguano i loro metodi! Prova questo:

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

Rimuovere la seguente dichiarazione dal codice:

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

e se si desidera sovrascrivere il database esistente utilizzare il seguente comando per CommandText:

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

Prova questa codice del database in Restore:

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()); 
    } 
} 

Per ulteriori spiegazioni Dai un'occhiata a questo tutorial: Backup & Restore Sql Server database using C#

+0

E 'stato fantastico. Mi ha salvato il tempo. e +1 per il link di riferimento anche :) – 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 

L'unica cosa che dovete preoccuparsi, ripristino del database non viene creato in MS SQL Server. Nel mio caso, dopo l'esecuzione della query, dovrebbe creare un nuovo database con il nome [C] e creare il file nel percorso di [C:\\Program Files\\Microsoft SQL Server\\MSSQL\\Data\\]