65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 C# 和 .NET 2.0 进行 SQL Server 2005 数据库备份和还原

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.24/5 (25投票s)

2008 年 5 月 27 日

CPOL

1分钟阅读

viewsIcon

317945

downloadIcon

22440

使用 C#、.NET 2.0 和 SMO 进行 SQL Server 2005 数据库备份和还原。

引言

以下文章描述了使用 C#.NET 2.0 和 SMO 以编程方式访问 SQL Server 2005 数据库备份并还原它。本文提供了执行此任务的编码示例。

SQL Server Management Objects (SMO) 是一系列对象,旨在编程管理 Microsoft SQL Server 的各个方面。

以下命名空间可用于以编程方式访问 SQL Server 2005

  • Microsoft.SqlServer.management
  • Microsoft.SqlServer.Management.NotificationServices
  • Microsoft.SqlServer.Management.Smo
  • Microsoft.SqlServer.Management.Smo.Agent
  • Microsoft.SqlServer.Management.Smo.Broker
  • Microsoft.SqlServer.Management.Smo.Mail
  • Microsoft.SqlServer.Management.Smo.RegisteredServers
  • Microsoft.SqlServer.Management.Smo.Wmi
  • Microsoft.SqlServer.Management.Trace

先决条件

在使用此代码之前,需要引用以下命名空间

  • Microsoft.SqlServer.Management.Smo;
  • Microsoft.SqlServer.Management.Common;

我使用了这两个类来执行备份和还原操作

  • Microsoft.SqlServer.Management.Smo.Backup
  • Microsoft.SqlServer.Management.Smo.Restore

有关更多信息,请查阅 MSDN 关于这两个类的文档

备份数据库

public void BackupDatabase(String databaseName, String userName, 
            String password, String serverName, String destinationPath)
{
    Backup sqlBackup = new Backup();
    
    sqlBackup.Action = BackupActionType.Database;
    sqlBackup.BackupSetDescription = "ArchiveDataBase:" + 
                                     DateTime.Now.ToShortDateString();
    sqlBackup.BackupSetName = "Archive";

    sqlBackup.Database = databaseName;

    BackupDeviceItem deviceItem = new BackupDeviceItem(destinationPath, DeviceType.File);
    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);
    
    Database db = sqlServer.Databases[databaseName];
    
    sqlBackup.Initialize = true;
    sqlBackup.Checksum = true;
    sqlBackup.ContinueAfterError = true;
    
    sqlBackup.Devices.Add(deviceItem);
    sqlBackup.Incremental = false;

    sqlBackup.ExpirationDate = DateTime.Now.AddDays(3);
    sqlBackup.LogTruncation = BackupTruncateLogType.Truncate;

    sqlBackup.FormatMedia = false;

    sqlBackup.SqlBackup(sqlServer);
}

还原数据库

public void RestoreDatabase(String databaseName, String filePath, 
       String serverName, String userName, String password, 
       String dataFilePath, String logFilePath)
{
    Restore sqlRestore = new Restore();
    
    BackupDeviceItem deviceItem = new BackupDeviceItem(filePath, DeviceType.File);
    sqlRestore.Devices.Add(deviceItem);
    sqlRestore.Database = databaseName;

    ServerConnection connection = new ServerConnection(serverName, userName, password);
    Server sqlServer = new Server(connection);

    Database db = sqlServer.Databases[databaseName];
    sqlRestore.Action = RestoreActionType.Database;
    String dataFileLocation = dataFilePath + databaseName + ".mdf";
    String logFileLocation = logFilePath + databaseName + "_Log.ldf";
    db = sqlServer.Databases[databaseName];
    RelocateFile rf = new RelocateFile(databaseName, dataFileLocation);
    
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFileLocation));
    sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName+"_log", logFileLocation));
    sqlRestore.ReplaceDatabase = true;
    sqlRestore.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
    sqlRestore.PercentCompleteNotification = 10;
    sqlRestore.PercentComplete += 
       new PercentCompleteEventHandler(sqlRestore_PercentComplete);
            
    sqlRestore.SqlRestore(sqlServer);
    db = sqlServer.Databases[databaseName];
    db.SetOnline();
    sqlServer.Refresh();
}

代码片段使用完全备份功能。如果需要,也可以执行增量和差异备份。

更新:2008 年 6 月 8 日

为了使用此代码,您的 SQL Server 身份验证模式需要配置为“混合模式”身份验证。如果您使用 Windows 身份验证,则需要修改 ServerConnection

SqlConnection sqlCon = new SqlConnection ("Data Source=Bappi; Integrated Security=True;");
ServerConnection connection = new ServerConnection(sqlCon);

使用以下代码修改两个代码示例中的 ServerConnection 部分,以便使用 Windows 安全性。

结论

由于此代码使用 SQL Server 2005 备份/还原功能,因此该代码在备份或还原数据库时遵循 SQL Server 2005 的规则。

© . All rights reserved.