[英]Using backup database programmatically
如何以編程方式使用.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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.