我如何在编程中使用.bak数据库备份文件(通过SQL Server中的查询进行备份)?
我希望我的应用程序可以将数据库备份到一个位置(我已经可以做到这一点),并且还希望它能够加载备份的数据库(.bak文件)。
我如何使用C#实现这个功能?
我如何在编程中使用.bak数据库备份文件(通过SQL Server中的查询进行备份)?
我希望我的应用程序可以将数据库备份到一个位置(我已经可以做到这一点),并且还希望它能够加载备份的数据库(.bak文件)。
我如何使用C#实现这个功能?
首先确保你在开发环境中安装了SMO(SQL Server Management Objects)并且可以访问它。如果你在开发环境中安装了某个版本的SQL Server,则通常情况下会有SMO。
如果你已经有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\
找到它。只需使用SqlCommand.ExecuteNonQuery来执行所需的SQL操作,例如:
BACKUP DATABASE [dbname] ......
RESTORE DATABASE [dbname] ......
这是如何备份:
-- =========================================================
-- 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'
restore.ReadBackupHeader(sql_server)
中找到。 - Gezim