使用C#进行SQL Server数据库备份进度

时间:2018-05-01 00:35:12

标签: c# asp.net sql-server

在这里需要你的想法:

要求是......

  1. 使用SQL脚本以编程方式备份​​SQL Server数据库
  2. 监控进度(为此我有一个脚本)
  3. 我有这段代码:

    protected void  Backup_click(object sender, EventArgs e)
    {
        var sqlQuery = "EXEC  [Test].[dbo].[Usp_Test_Backup_Database] @BackupLabel = 'DB_TEST_1_18_PostScript'";
    
        using (var connection = new SqlConnection(ConnectionString))
        {
            await connection.OpenAsync();
    
            using (var tran = connection.BeginTransaction())
            {
                using (var command = new SqlCommand(sqlQuery, connection, tran))
                {
                    try
                    {
                        await command.ExecuteNonQueryAsync();
                    }
                    catch (Exception)
                    {
                        tran.Rollback();
                        throw;
                    }
    
                    tran.Commit();
                }
            }
        }
    }
    

    这需要备份。通常我SSMS到我的服务器,并执行备份进度脚本,其中包含字段 - PERCENTAGE(10,20,34,70等)

    以多种想法运行

    1. 在我的界面上创建一个新按钮并执行进度脚本,读取百分比值并更新某个标签中的值?

    2. 或者还包含一个CMD语句来执行备份脚本以及备份代码?

    3. 有什么建议吗?

      TIA,

1 个答案:

答案 0 :(得分:0)

您可以使用PRINTRAISERROR将消息从SQL Server发送到Applicatio。如果你需要确保要发送消息,你应该使用RAISEERROR和NOWAIT:

RAISERROR (N'working', 10,1) WITH NOWAIT

格式如docs

中所述,如下所示
RAISERROR (N'This is message %s %d.', -- Message text.  
           10, -- Severity,  
           1, -- State,  
           N'number', -- First argument.  
           5); -- Second argument.  
-- The message text returned is: This is message number 5.  

然后,您可以使用InfoMessage的{​​{1}}事件订阅消息事件。

SqlConnection

请注意,SQL Server会自行发送信息消息,您也可以定义your own messages。当一个类型为错误的消息时,客户端连接迟早会被关闭,所以你需要小心一点,为你自己的消息选择什么类型的消息。