简体   繁体   English

以编程方式使用备份数据库

[英]Using backup database programmatically

How can I use a .bak database backup file (backed up via a query in SQL Server ) programmatically? 如何以编程方式使用.bak数据库备份文件(通过SQL Server中的查询备份)?

I want my application to back up my database to a location (which I can already do) and I also want it to be able to load a backed up database (the .bak file). 我希望我的应用程序将我的数据库备份到一个位置(我已经可以这样做了),并且我还希望它能够加载备份的数据库(.bak文件)。

How can I do this using C#? 我怎么能用C#做到这一点?

You need to first make sure you have the SMO (SQL Server Management Objects) installed and available to you on your dev box. 您需要首先确保在开发框中安装了SMO(SQL Server管理对象)并可以使用它。 This is typically the case, if you have installed some version of SQL Server on it. 如果您已在其上安装了某些版本的SQL Server,则通常就是这种情况。

If you have the SMO library available, you can use this code snippet for your operation: 如果您有可用的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......
 }

For this to work, you need to have the following project references 为此,您需要具有以下项目引用

替代文字

and the namespace Microsoft.SqlServer.SmoExtended is implemented in the assembly called Microsoft.SqlServer.SmoExtended.dll which should be found in the directory C:\\Program Files\\Microsoft SQL Server\\100\\SDK\\Assemblies\\ if you have SMO installed. 名称空间Microsoft.SqlServer.SmoExtended在名为Microsoft.SqlServer.SmoExtended.dll的程序集中实现,如果安装了SMO,则该程序集应位于目录C:\\Program Files\\Microsoft SQL Server\\100\\SDK\\Assemblies\\

If you don't have SMO installed, you can go fetch it from here for SQL Server 2008 or here for SQL Server 2008 R2 (there's also an older version for SQL Server 2005) 如果您尚未安装SMO,你可以从它拿来这里为SQL Server 2008或在这里为SQL Server 2008 R2(也有SQL Server 2005的旧版本)

Simply use SqlCommand.ExecuteNonQuery to execute the SQL needed to perform the operations, such as: 只需使用SqlCommand.ExecuteNonQuery执行执行操作所需的SQL,例如:

BACKUP DATABASE [dbname] ......

RESTORE DATABASE [dbname] ......

Of course the SQL user in question will need to have appropiate permissions. 当然,有问题的SQL用户需要具有适当的权限。

This is how to backup: 这是如何备份:

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

And this is how to restore: 这是如何恢复:

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