2009-03-20 16 views
5

¿Cuán fácil es hacer una copia de seguridad de una base de datos de SQL Server a través del código C#?Backup SQL Server a través de C#

Veo muchas preguntas relacionadas, pero no hay respuestas reales.

+2

estás tratando de copia de seguridad de toda la base de datos o partes de ella? –

Respuesta

3

Objetos de administración de SQL - Microsoft.SqlServer.Management.Smo

Dispone de los métodos que necesitan para completar esa acción.

4

O bien: Genere su script de copia de seguridad en Management Studio, póngalo en un procedimiento almacenado, ejecute el procedimiento desde el 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 
2

Debería ser bastante fácil siempre que tenga los permisos correctos.

2 maneras que vienen a la mente, no los objetos de administración de SQL ya mencionados, me encontré con un buen proyecto que hace uso de estos here

Siempre se puede simplemente tirar un comando de copia de seguridad de T-SQL en el servidor a través de la Objetos de ADO.Net también. MSDN referencia al comando principal que necesitará here

+0

Garantizar los permisos no es un problema –

3

Ver using SMO Library from c#

sobre el uso de la biblioteca de C# SMO para realizar tareas tales Adminstrator copia de seguridad y restor.

2

Si desea trabajar con la secuencia de bytes en C#, por ejemplo, comprimir la secuencia antes de escribir en el disco, puede mirar el código de mi proyecto, SQL Server Compressed Backup. Tiene una pequeña envoltura DLL VDI (la API de dispositivo virtual SQL) escrita en C++ que expone fielmente cada opción VDI a .Net, y el resto (la mayor parte) del código está escrito en C#.

3

Aquí hay una secuencia de comandos para poner el contenido de la copia de seguridad de la base de datos en una secuencia (como un resultado "select"), que puede ser útil para crear una copia de seguridad programmaticaly sin cualquier carpeta compartida. Lo único que necesita es la conexión a un servidor. Probado para 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); 

El resultado es como siguiente manera:

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