繁体   English   中英

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

[英]SQL Server database backup progress using C#

我的要求是:

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

我有这个代码:

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. etc)

带着多重想法奔跑:

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

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

有什么建议?

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

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

格式如下文档中所述:

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.  

然后,您可以使用SqlConnectionInfoMessage事件订阅消息事件。

var sqlQuery = @"RAISERROR (N'working', 10,1) WITH NOWAIT";

using (var connection = new SqlConnection(@"Server=localhost\SQLExpress;Database=master;Trusted_Connection=True;"))
{
    await connection.OpenAsync();

    connection.InfoMessage += (sender, args) => 
    {
        foreach (var element in args.Errors.OfType<SqlError>())
        {
            Console.WriteLine($"Class: {element.Class} LineNumber: {element.LineNumber} Message: {element.Message} Number: {element.Number} Procedure: {element.Procedure}");
        }
    };

    using (var command = new SqlCommand(sqlQuery, connection))
    {
        await command.ExecuteNonQueryAsync();
    }
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM