2010-11-19 11 views
0

je peux sauvegarder une base de données sur le disque dur avec la méthode suivante:Sauvegarde d'une base de données SQL Server à partir du disque dur avec des procédures stockées?

void BackUp(string ConnectionString, string DatabaseFullPath, string backUpPath) 
{ 
    progressBar1.Value = 0; 

    using (SqlConnection con = new SqlConnection(ConnectionString)) 
    { 
     con.Open(); 

     string UseMaster = "USE master"; 
     SqlCommand UseMasterCommand = new SqlCommand(UseMaster, con); 
     UseMasterCommand.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Alter1 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Single_User WITH Rollback Immediate"; 
     SqlCommand Alter1Cmd = new SqlCommand(Alter1, con); 
     Alter1Cmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Restore = @"BACKUP DATABASE [" + DatabaseFullPath + "] TO DISK = N'" + backUpPath + @"' WITH NOFORMAT, NOINIT, NAME = N'" + DatabaseFullPath + "-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"; 
     SqlCommand RestoreCmd = new SqlCommand(Restore, con); 
     RestoreCmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Alter2 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Multi_User"; 
     SqlCommand Alter2Cmd = new SqlCommand(Alter2, con); 
     Alter2Cmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     labelReport.Text = "Successful"; 
    } 
} 

et, Comment puis-je convertir à une procédure stockée? (Je suis débutant dans SQL Server)

Répondre

2

Si votre intention est d'encapsuler la tâche de sauvegarde dans une procédure stockée uniquement pour qu'elle puisse être exécutée à partir de C#, alors peut-être que vous voulez plutôt considérer SQL Server Management Objects (SMO)? Ces objets vous permettent d'accéder par programme aux tâches d'administration de SQL Server, telles que l'exécution de sauvegardes. Consultez le deuxième échantillon ici: http://msdn.microsoft.com/en-us/library/ms162133.aspx


Edit: Mais pour répondre à la question, vous pouvez suivre cet exemple qui fonctionne pour moi:

CREATE PROCEDURE BackupDatabase 
(
    @databaseName sysname, 
    @backupPath varchar(260) 
) 
AS 
BEGIN 
    BACKUP DATABASE @databaseName 
     TO DISK = @backupPath 
     WITH FORMAT; 
END 
GO 

appelé par

DECLARE @return_value int 

EXEC @return_value = [dbo].[BackupDatabase] 
     @databaseName = play, 
     @backupPath = N'c:\backup\play.bak' 

SELECT 'Return Value' = @return_value 

GO 
+0

En fait, je l'ai vu avant, mais je ne pouvais pas créer le SP ci-dessus par moi-même. –

+0

Merci, mais ma base de données est sur le disque dur à côté de mon fichier exe Win App! –

+0

Modifié, cependant je ne crois pas que votre paramètre DatabaseFullPath puisse être le chemin vers le fichier mdf car ce n'est pas une syntaxe valide. Ce sera le nom de la base de données. Aussi je ne crois pas que votre DB doit être en mode mono-utilisateur pour effectuer la sauvegarde –

-1

Simple! Demander 3 paramètres dans le SP, Db, Path et Name. Donnez les valeurs remplaçant les valeurs physiques et appelez la procédure en C#.

+0

Vraiment !!! Je ne le savais pas du tout –

Questions connexes