Backup do SQL Server via C #

Quão fácil é fazer backup de um database do SQL Server via código C #?

Eu vejo muitas questões relacionadas, mas sem respostas reais.

Ou: Gere seu script de backup no Management Studio, coloque-o em um procedimento armazenado, execute o procedimento a partir do código C #.

CREATE PROCEDURE sp_backup AS BEGIN BACKUP DATABASE [YourDatabase] TO DISK = N'C:\YourPathAndFile.bak' WITH NOFORMAT, NOINIT, NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 END GO 

Objetos de Gerenciamento SQL – Microsoft.SqlServer.Management.Smo

Tem os methods necessários para concluir essa ação.

Veja usando o SMO Library from c #

sobre como usar a biblioteca SMO do c # para executar tarefas administrativas como backup e restauração.

Aqui está um script para colocar conteúdo de backup de database em um stream (como um resultado “select”), que pode ser útil para criar programaticamente backup sem qualquer pasta compartilhada. A única coisa que você precisa é a conexão com um servidor. Testado para o MSSQL 2008 R2.

 -- переменные DECLARE @dbName nvarchar(MAX); SET @dbName = N'AdventureWorks'; DECLARE @backupFileName nvarchar(MAX); SET @backupFileName = N'C:\Temp\' + @dbName + N'.bak'; --EXECUTE (N'PRINT N''Создание бэкапа '+ @backupFileName + '''') -- создание временной папки EXEC xp_cmdshell N'mkdir C:\Temp', no_output; -- бэкап с перетиранием имеющегося файла DECLARE @sqlScript nvarchar(MAX); SET @sqlScript = N'BACKUP DATABASE [' + @dbName + '] TO DISK = N''' + @backupFileName + ''' WITH NOFORMAT, INIT, NAME = N''' + @dbName + '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, STATS = 10'; --SELECT @sqlScript AS backupScript EXECUTE (@sqlScript); -- похоже, файл в 3ГБ можно вычитать... но памяти на это уходит ОЧЕНЬ МНОГО -- вычитывание файла SET @sqlScript = N' SELECT N''' + @backupFileName + ''' AS [backupFileName], BulkColumn AS [backupContent] FROM OPENROWSET (BULK ''' + @backupFileName + ''', SINGLE_BLOB) MyFile'; --SELECT @sqlScript AS openRowsetScript EXECUTE (@sqlScript); -- удаление файла SET @sqlScript = N'EXEC xp_cmdshell ''del "' + @backupFileName + '"'', no_output'; EXECUTE (@sqlScript); 

O resultado é como segue:

  backupFileName backupContent C:\Temp\AdventureWorks.bak 0x54415045000003008C000E01000000000000000000000000000... 

Deve ser bastante fácil, desde que você tenha as permissions certas.

2 maneiras que vêm à mente, há os objects de gerenciamento SQL já mencionados, eu encontrei um projeto legal que faz uso destes aqui

Você sempre pode simplesmente executar um comando de backup T-SQL no servidor por meio dos objects ADO.Net também. Msdn referência ao comando principal que você precisa aqui

Se você quiser trabalhar com o stream de bytes em C #, por exemplo, compactando o stream antes de gravar no disco, você pode examinar o código do meu projeto, SQL Server Compressed Backup . Ele tem um pequeno wrapper DLL VDI (o API do dispositivo virtual do SQL Server) escrito em C ++, expondo com fidelidade cada opção VDI para .Net, e o restante (a granel) do código é escrito em C #.