2010-11-19 115 views
0

我可以備份硬盤上的數據庫以下方法:使用存儲過程從硬盤備份SQL Server數據庫?

void BackUp(string ConnectionString, string DatabaseFullPath, string backUpPath) 
{ 
    progressBar1.Value = 0; 

    using (SqlConnection con = new SqlConnection(ConnectionString)) 
    { 
     con.Open(); 

     string UseMaster = "USE master"; 
     SqlCommand UseMasterCommand = new SqlCommand(UseMaster, con); 
     UseMasterCommand.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Alter1 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Single_User WITH Rollback Immediate"; 
     SqlCommand Alter1Cmd = new SqlCommand(Alter1, con); 
     Alter1Cmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Restore = @"BACKUP DATABASE [" + DatabaseFullPath + "] TO DISK = N'" + backUpPath + @"' WITH NOFORMAT, NOINIT, NAME = N'" + DatabaseFullPath + "-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"; 
     SqlCommand RestoreCmd = new SqlCommand(Restore, con); 
     RestoreCmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     string Alter2 = @"ALTER DATABASE [" + DatabaseFullPath + "] SET Multi_User"; 
     SqlCommand Alter2Cmd = new SqlCommand(Alter2, con); 
     Alter2Cmd.ExecuteNonQuery(); 

     progressBar1.Value += 25; 

     labelReport.Text = "Successful"; 
    } 
} 

和,我怎樣才能將其轉換爲一個存儲過程?

(我是新手在SQL Server中)

回答

2

如果您的意圖是將備份任務完全封裝在存儲過程中,那麼它可以從C#執行,那麼您可能想要考慮使用SQL Server Management Objects(SMO)?這些對象使您可以通過編程訪問SQL Server管理任務,例如執行備份。看看這裏的第二個示例:http://msdn.microsoft.com/en-us/library/ms162133.aspx


編輯:但是,爲了回答這個問題,你可以按照這個例子對我的作品:

CREATE PROCEDURE BackupDatabase 
(
    @databaseName sysname, 
    @backupPath varchar(260) 
) 
AS 
BEGIN 
    BACKUP DATABASE @databaseName 
     TO DISK = @backupPath 
     WITH FORMAT; 
END 
GO 

通過

DECLARE @return_value int 

EXEC @return_value = [dbo].[BackupDatabase] 
     @databaseName = play, 
     @backupPath = N'c:\backup\play.bak' 

SELECT 'Return Value' = @return_value 

GO 
+0

其實我以前看過,但我自己無法創建上面的'SP'。 – 2010-11-19 07:24:49

+0

謝謝,但我的數據庫在我的Win App exe文件旁邊的硬盤上! – 2010-11-19 07:50:25

+0

編輯,但我不相信你的DatabaseFullPath參數可以是mdf文件的路徑,因爲它是無效的語法。這將是數據庫名稱。 另外我不相信你的數據庫需要在單用戶模式下執行備份 – 2010-11-19 08:05:15

-1

簡單!詢問SP,Db,路徑和名稱中的3個參數。給這些值替換物理值並在C#中調用過程。

+0

稱爲真的!我根本不知道它 – 2010-11-19 07:21:47

相關問題