2010-10-17 48 views
8

Làm cách nào để sử dụng tệp sao lưu cơ sở dữ liệu .bak (được sao lưu thông qua truy vấn trong SQL Server) theo lập trình?Sử dụng cơ sở dữ liệu sao lưu theo lập trình

Tôi muốn ứng dụng sao lưu cơ sở dữ liệu của mình đến một vị trí (mà tôi có thể làm) và tôi cũng muốn ứng dụng có thể tải cơ sở dữ liệu đã sao lưu (tệp .bak).

Tôi làm cách nào để thực hiện việc này bằng C#?

Trả lời

14

Trước tiên, bạn cần đảm bảo rằng bạn đã cài đặt SMO (Đối tượng quản lý SQL Server) và có sẵn cho bạn trên hộp dev của bạn. Đây là trường hợp điển hình, nếu bạn đã cài đặt một số phiên bản của SQL Server trên đó.

Nếu bạn có thư viện SMO có sẵn, bạn có thể sử dụng đoạn mã này cho hoạt động của bạn:

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...... 
} 

Để làm việc này, bạn cần phải có các dự án sau đây tham chiếu

alt text

và không gian tên Microsoft.SqlServer.SmoExtended được triển khai trong hội đồng gọi là Microsoft.SqlServer.SmoExtended.dll cần được tìm thấy trong thư mục C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\ nếu bạn đã cài đặt SMO.

Nếu bạn không có cài đặt SMO, bạn có thể đi lấy nó từ here cho SQL Server 2008 hoặc here cho SQL Server 2008 R2 (có cũng là một phiên bản cũ cho SQL Server 2005)

+1

SMO nên không thực sự cần thiết cho một nhiệm vụ đơn giản như vậy. – driis

+3

@driis: vì khi sử dụng tệp .bak một cách đơn giản, một nhiệm vụ đơn giản? –

+1

@driis: vâng, nếu đó chỉ là nhiệm vụ này - thì SMO có thể quá mức cần thiết. Nhưng OP có thể mở rộng việc này để làm nhiều hơn. Đôi khi nó cũng chỉ là một lựa chọn - tôi có muốn sử dụng câu lệnh T-SQL và thực thi chúng hay không, hay tôi muốn sử dụng một thư viện nhiệm vụ cụ thể để đạt được điều gì đó. –

5

Đơn giản chỉ cần sử dụng SqlCommand.ExecuteNonQuery để thực hiện SQL cần thiết để thực hiện các hoạt động, chẳng hạn như:

BACKUP DATABASE [dbname] ...... 

RESTORE DATABASE [dbname] ...... 

Dĩ nhiên người sử dụng SQL trong câu hỏi sẽ cần phải có quyền thích hợp.

1

Đây là cách để sao lưu:

-- ========================================================= 
-- 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 [email protected] 

END 

GO 

Và đây là làm thế nào để khôi phục:

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ác vấn đề liên quan