C# 通过C语言备份sqlserver#

C# 通过C语言备份sqlserver#,c#,sql,sql-server,backup,C#,Sql,Sql Server,Backup,通过C代码备份SQL Server数据库有多容易 我看到了很多相关的问题,但没有真正的答案。SQL管理对象-Microsoft.SqlServer.Management.Smo 它具有完成该操作所需的方法。或者:在ManagementStudio中生成备份脚本,将其放入存储过程,从C代码运行过程 如果你有正确的权限,应该很容易 我想到了两种方法,即前面提到的SQL管理对象,我发现了一个很好的项目,它利用了这些对象 您也可以通过ADO.Net对象在服务器上抛出T-SQL备份命令。Msdn对您需要的

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


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

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


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

或者:在ManagementStudio中生成备份脚本,将其放入存储过程,从C代码运行过程


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

我想到了两种方法,即前面提到的SQL管理对象,我发现了一个很好的项目,它利用了这些对象

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

请参见


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

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

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

您正在尝试备份整个数据库或其中的一部分吗?确保权限不是问题
    backupFileName  backupContent
C:\Temp\AdventureWorks.bak  0x54415045000003008C000E01000000000000000000000000000...