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

Я могу создать резервную копию базы данных на жестком диске следующим способом:

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Сервер)

1 Ответ

2 голосов
/ 19 ноября 2010

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

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

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
...