Bonjour,
j'ai actuellement une procedure stockee qui tourne environ 1/4 dheure (sql server 2005) quand elle s'execute. Pour eviter la frustration des utilisateurs, je voudrais pouvoir afficher sa progression.
Voila le demarche que j'envisageais:
  • Lancer la procedure depuis mon code en installant un callback.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    AsyncCallback proSto_callback = new AsyncCallback(callback_finProSto);
    sql_cmd.CommandType = CommandType.StoredProcedure;
    sql_cmd.CommandText = "ps1";
    sql_cmd.CommandTimeout = int.Parse(ConfigurationSettings.AppSettings["DureeTimeout"].ToString());
    sql_cmd.BeginExecuteNonQuery(proSto_callback, sql_cmd);
  • Mettre a jour dans ma procedure un attribut dans une table.
  • Lire cet attribut depuis mon code et mettre a jour une barre de progression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while (proStoStatus != 0)
    {
       //On relax le systeme
       System.Threading.Thread.Sleep(5000);
       //TODO : On lit et on update la barre
    }


Plusieurs questions :
Puis je reutiliser le sqlCommand qui m'a servi a lancer la procedure stockee pour lancer des requetes de selection pdt l'execution asynchrone de la proSto ?
Sachant que le code est executee en codebehind depuis une page aspx, ya t il un effet nefaste a faire un thread.sleep() ?
Ya t il une facon plus simple de proceder pour connaitre l'avancement de ma proSto ?

Merci.