Использование резервной базы данных программно - PullRequest
8 голосов
/ 17 октября 2010

Как программно использовать файл резервной копии базы данных .bak (резервное копирование с помощью запроса в SQL Server )?

Я хочу, чтобы мое приложение выполняло резервное копирование базы данных в определенное место (что я уже могу сделать), и я также хочу, чтобы он был в состоянии загрузить резервную копию базы данных (файл .bak).

Как я могу сделать это с помощью C #?

Ответы [ 4 ]

15 голосов
/ 17 октября 2010

Сначала необходимо убедиться, что SMO (объекты управления SQL Server) установлены и доступны для вас на вашем компьютере разработчика.Обычно это имеет место, если на нем установлена ​​какая-либо версия SQL Server.

Если у вас есть доступная библиотека SMO, вы можете использовать этот фрагмент кода для своей операции:

using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;

static void Main(string[] args)
{
    // create instance of SMO Server object
    Server myServer = new Server("(local)");

    // create new instance of "Restore" object    
    Restore res = new Restore();
    res.Database = "SMO";  // your database name

    // define options       
    res.Action = RestoreActionType.Database;
    res.Devices.AddDevice(@"C:\SMOTest.bak", DeviceType.File);
    res.PercentCompleteNotification = 10;
    res.ReplaceDatabase = true;

    // define a callback method to show progress
    res.PercentComplete += new PercentCompleteEventHandler(res_PercentComplete);

    // execute the restore    
    res.SqlRestore(myServer);
 }

 // method to show restore progress
 static void res_PercentComplete(object sender, PercentCompleteEventArgs e)
 {
    // do something......
 }

Чтобы это работало, вам нужно иметь следующие ссылки на проект

alt text

, а пространство имен Microsoft.SqlServer.SmoExtended реализовано в сборке под названием Microsoft.SqlServer.SmoExtended.dll, которую следует найти вкаталог C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\ если у вас установлен SMO.

Если у вас не установлен SMO, вы можете получить его из здесь для SQL Server 2008 или здесь для SQL Server 2008 R2 (есть также более старая версия для SQL Server 2005)

5 голосов
/ 17 октября 2010

Просто используйте SqlCommand.ExecuteNonQuery для выполнения SQL, необходимого для выполнения операций, таких как:

BACKUP DATABASE [dbname] ......

RESTORE DATABASE [dbname] ......

Конечно, у данного пользователя SQL должны быть соответствующие разрешения.

1 голос
1 голос
/ 17 октября 2010

Как сделать резервную копию:

-- =========================================================
-- Author:        Stefan
-- Create date:   16.07.2010
-- Last mutation: 16.07.2010
-- Description:   Backup der ausgewählten Datenbank
-- =========================================================
CREATE PROCEDURE [dbo].[sp_BackupDatabase] 
    @in_strDataBase varchar(50)
    --,@in_strUser varchar(36)

AS
BEGIN

DECLARE @strBasePath  nvarchar(3000)
DECLARE @strFileName  nvarchar(1000)

DECLARE @strFileNameAndPath  nvarchar(4000)

SET @strBasePath = 'E:\Temp\'

SET @strFileName = @in_strDataBase
SET @strFileName = @strFileName + '_'
SET @strFileName = @strFileName + convert(varchar, getdate(), 112)
SET @strFileName = @strFileName + '_' + REPLACE(convert(varchar, getdate(), 108),':','_'); 
SET @strFileName = @strFileName + '_sts' 
SET @strFileName = @strFileName + '.bak'

SET @strFileNameAndPath = @strBasePath + @strFileName

PRINT @strFileNameAndPath

BACKUP DATABASE @in_strDataBase TO DISK=@strFileNameAndPath

END

GO

И это как восстановить:

RESTORE DATABASE MyDatabase
FROM DISK='C:\temp\MyDatabase_20100810.bak' 
WITH REPLACE,
MOVE 'MyDatabase' TO 'E:\SQLData_2008\MyDatabase.mdf',
MOVE 'MyDatabase_log' TO 'E:\SQLData_2008\MyDatabase.ldf' 
...