簡體   English   中英

以編程方式使用備份數據庫

[英]Using backup database programmatically

如何以編程方式使用.bak數據庫備份文件(通過SQL Server中的查詢備份)?

我希望我的應用程序將我的數據庫備份到一個位置(我已經可以這樣做了),並且我還希望它能夠加載備份的數據庫(.bak文件)。

我怎么能用C#做到這一點?

您需要首先確保在開發框中安裝了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......
 }

為此,您需要具有以下項目引用

替代文字

名稱空間Microsoft.SqlServer.SmoExtended在名為Microsoft.SqlServer.SmoExtended.dll的程序集中實現,如果安裝了SMO,則該程序集應位於目錄C:\\Program Files\\Microsoft SQL Server\\100\\SDK\\Assemblies\\

如果您尚未安裝SMO,你可以從它拿來這里為SQL Server 2008或在這里為SQL Server 2008 R2(也有SQL Server 2005的舊版本)

只需使用SqlCommand.ExecuteNonQuery執行執行操作所需的SQL,例如:

BACKUP DATABASE [dbname] ......

RESTORE DATABASE [dbname] ......

當然,有問題的SQL用戶需要具有適當的權限。

這是如何備份:

-- =========================================================
-- 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' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM