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

如何以编程方式使用.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' 

检查此链接:

使用c#创建SQL Server备份文件(.bak)到任何位置

这个:

备份和还原SQL数据库