2010-11-19 118 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

相关问题