2010-11-19 1 views
0

я могу создать резервную копию базы данных на жестком диске с помощью следующего метода:Резервное копирование базы данных SQL Server с жесткого диска с помощью хранимых процедур?

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"; 
    } 
} 

и, как я могу преобразовать его в хранимую процедуру?

(Я новичок в SQL Server)

ответ

2

Если вы намерены инкапсулировать задачу резервного копирования в хранимую процедуру только так, чтобы ее можно было выполнить с C#, то, возможно, вы хотите вместо этого рассмотреть SQL Server Management Objects (SMO)? Эти объекты предоставляют программный доступ к задачам администрирования SQL Server, таким как выполнение резервных копий. Проверьте второй образец здесь: http://msdn.microsoft.com/en-us/library/ms162133.aspx


Edit: Но чтобы ответить на этот вопрос, вы можете следовать этому примеру, который работает для меня:

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

вызывается

DECLARE @return_value int 

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

SELECT 'Return Value' = @return_value 

GO 
+0

Собственно, я видел это раньше, но я не мог создать вышеупомянутый «SP» сам. –

+0

Спасибо, Но моя база данных находится на жестком диске рядом с моим файлом exe для Win App! –

+0

Отредактировано, однако я не считаю, что ваш параметр DatabaseFullPath может быть путем к файлу mdf, так как это недопустимый синтаксис. Это будет имя базы данных. Также я не считаю, что ваша БД должна быть в однопользовательском режиме для выполнения резервного копирования –

-1

просто! Задайте 3 параметра в SP, Db, Path и Name. Дайте значения, заменяющие физические значения, и вызовите процедуру на C#.

+0

В самом деле !!! Я вообще этого не знал –