Получить статус выполнения долго выполняемого SP в Asp.net ?

#c# #asp.net #sql-server

#c# #asp.net #sql-сервер

Вопрос:

У меня есть SP в SQLServer (2005 ), который использует cursor и выполняет некоторые вещи (на 10 000 строк)

Мне нужно что-то вроде индикатора выполнения (чтобы увидеть на моем веб-сайте c #.).

Я могу взять 10 000, разделенных на 100, таким образом, чтобы каждая 1000 записей выполнялась (с помощью команды печати sql) : process of another 1000 is done !!!

Но я хочу перехватить эту печать (каждую новую печать) в моем asp.net веб-сайт.

как я могу перехватить команды печати / или есть какой-нибудь лучший способ сделать это?

Ответ №1:

Процесс, который мы использовали для реализации чего-то подобного, немного сложнее, но он работает.

Мы создали веб-сервис, который имел несколько методов, например;

 [SoapDocumentMethod(OneWay = true), WebMethod]
public void StartUpdate(string reference)

[WebMethod]
public ProcessStatus GetProcessStatus(string reference)
  

Вызов веб-метода asynch запускает запуск процесса и передает ссылочный номер для идентификации себя. Это, в свою очередь, вызвало хранимую процедуру, которая использовала обновление итераций курсора для обновления другой таблицы с помощью ‘reference’, ‘count’ и ‘status’

Затем GetProcessStatus передаст эту ссылку и вернет текущее количество и статус. Если статус был завершен, мы могли бы двигаться дальше, в качестве альтернативы, вы могли бы использовать ‘count’ на этом этапе для обновления статуса. Пример этого;

 protected void Page_Load(object sender, EventArgs e)
    {
        this.JavaScript.Text = string.Format("<script>setTimeout("{0}", {1});</script>", 
            this.Page.GetPostBackClientEvent(this.btnRefresh, ""), 3000);


        ProcessStatus status= Class.GetProcessStatus(reference);

        lblCount.Text = status.Count.ToString();



        if (import.Status == (int)ProcessStatus.Status.Complete)
        {
            Globals.GoUrl("/Import/File/Map.aspx");
        }
    }
  

Надеюсь, это поможет.

Комментарии:

1. когда произошел шаг прогресса, передается ли он в asp.net ? или asp.net в таймере — запрос значения …?

2. Просто вызовите второй метод на стандартной странице asp, используя таймер, добавленное обновление выше.

3. Если StartUpdate для обновления используется транзакция, GetProcessStatus он вообще не сможет запросить вторую таблицу.

4. Как это работает в сценарии операционной системы SP с операторами печати?