通过C#备份SQL Server

时间:2009-03-20 03:26:25

标签: c# sql sql-server backup

通过C#代码备份SQL Server数据库有多容易?

我看到很多相关的问题,但没有真正的答案。

6 个答案:

答案 0 :(得分:4)

或者:在Management Studio中生成备份脚本,将其放入存储过程,从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

答案 1 :(得分:3)

SQL管理对象 - Microsoft.SqlServer.Management.Smo

它具有完成该操作所需的方法。

答案 2 :(得分:3)

请参阅 using SMO Library from c#

如何使用c#中的SMO库来执行管理员任务,例如备份和恢复。

答案 3 :(得分:3)

这是一个将数据库备份内容放入流中的脚本(作为“选择”结果),这对于创建备份programmaticaly WITHOUT 任何共享文件夹非常有用。您唯一需要的是与服务器的连接。针对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);

结果如下:

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

答案 4 :(得分:2)

如果你拥有正确的权限,应该很容易。

有两种想法,已经提到的SQL管理对象,我发现了一个很好的项目,它使用了这些here

您也可以通过ADO.Net对象在服务器上抛出T-SQL备份命令。 Msdn引用您需要的主命令here

答案 5 :(得分:2)

如果您想使用C#中的字节流,例如在写入磁盘之前压缩流,欢迎您查看我的项目SQL Server Compressed Backup中的代码。它有一个用C ++编写的小型VDI(SQL Server虚拟设备API)DLL包装器,忠实地将每个VDI选项暴露给.Net,其余(大量)代码用C#编写。