如何以编程方式使用.bak数据库备份文件(通过SQL Server中的查询备份)?
我希望我的应用程序将我的数据库备份到某个位置(我已经可以这样做了),并且我还希望它能够加载备份的数据库(.bak文件)。
我怎样才能使用C#?
答案 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......
}
为此,您需要具有以下项目参考
并且名称空间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)