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

时间:2010-10-17 14:21:30

标签: c# sql-server database backup

如何以编程方式使用.bak数据库备份文件(通过SQL Server中的查询备份)?

我希望我的应用程序将我的数据库备份到某个位置(我已经可以这样做了),并且我还希望它能够加载备份的数据库(.bak文件)。

我怎样才能使用C#?

4 个答案:

答案 0 :(得分:15)

您需要首先确保在开发框中安装了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的程序集中实现,如果安装了SMO,则应在目录C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\中找到。

如果您没有安装SMO,可以从here获取SQL Server 2008或here获取SQL Server 2008 R2(还有SQL Server 2005的旧版本)< / p>

答案 1 :(得分:5)

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

BACKUP DATABASE [dbname] ......

RESTORE DATABASE [dbname] ......

当然,有问题的SQL用户需要具有适当的权限。

答案 2 :(得分:1)

这是如何备份:

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

答案 3 :(得分:1)