2009-03-20 17 views
5

Quanto è facile eseguire il backup di un database SQL Server tramite codice C#?Backup di SQL Server tramite C#

Vedo molte domande correlate, ma nessuna risposta reale.

+2

stai cercando di backup di tutto il DB o porzioni di esso? –

risposta

3

SQL Management Objects - Microsoft.SqlServer.Management.Smo

Ha le metodi avete bisogno per completare l'azione.

4

Oppure: generare lo script di backup in Management Studio, inserirlo in una stored procedure, eseguire la procedura dal codice C#.

2

Dovrebbe essere abbastanza semplice se si dispone delle autorizzazioni necessarie.

2 modi che vengono in mente, non c'è gli oggetti SQL di gestione già citati, ho trovato un bel progetto che fa uso di questi here

Si può sempre e solo gettare un comando di backup T-SQL sul server attraverso la Anche gli oggetti ADO.Net. Msdn riferimento al comando principale avrete bisogno here

+0

Garantire le autorizzazioni non è un problema –

3

Vedi using SMO Library from c#

su come usare la biblioteca di SMO da C# per eseguire attività adminstrator quali backup e restor.

2

Se si desidera lavorare con lo stream di byte in C#, ad esempio comprimendo lo stream prima di scrivere su disco, è possibile consultare il codice del mio progetto, SQL Server Compressed Backup. Ha un piccolo wrapper DLL VDI (l'API del dispositivo virtuale SQL Server) scritto in C++ che espone fedelmente ogni opzione VDI a .Net, mentre il resto (la maggior parte) del codice è scritto in C#.

3

Ecco uno script per inserire il contenuto del backup del database in uno stream (come risultato "select"), che può essere utile per creare un backup programmatico SENZA qualsiasi cartella condivisa. L'unica cosa di cui hai bisogno è la connessione a un server. Testato per 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); 

Il risultato è come segue:

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