Running a procedure in background !

Hi,

I have a procedure that takes 5 minutes to run, it is called every time that a certain page is called(web project C#) but it takes to much time to the page to load, and it's a nonQuery is there a way to continue the execution without need to wait the procedure finish

Thanks

This is the code of my program.

public void atribui_valor(string cliente, string segundos)

{

string sql="ADDLOCALIDADE";

SqlCommand cmd=new SqlCommand(sql, conn);

conn.Open();

cmd.ExecuteNonQuery();

conn.Close();

}

And this the procedure..

PROCEDURE ADDLOCALIDADE
AS
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,8)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,8)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,7)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,7)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,6)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,6)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,5)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,5)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,4)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,4)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,3)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,3)) WHERE LOCALIDADE IS NULL
UPDATE PABX SET LOCALIDADE = (SELECT CIDADE FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,2)), CLASSIFICA = (SELECT COD_TIPO FROM LOCALIDADES WHERE PREFIXO = LEFT(PABX.NRTELEFONE,2)) WHERE LOCALIDADE IS NULL




Answer this question

Running a procedure in background !

  • vcp_learner

    Can you please give me one example with a thread...

    thanks !

  • Biber Technology

    There is a new method called BeginExecuteNonQuery available in .NET 2.0. In 1.x, you'll need to create your own thread for this.

  • James Moore - Visionspring

    There may also be ways to analyze and optimize your ADDLOCALIDADE procedure so that it runs faster. You may have already looked into this, but if not you should try the SQL Server forums for assistance.

    -Tom Meschter
    Software Dev, Visual C# IDE

  • Maria24

    I would argue against using the system threadpool for things like this which could take quite a while to run. It's very easy to deadlock the threadpool accidentally.

    I would suggest using a custom threadpool instead. I have one available (for free, naturally) at
    http://www.pobox.com/~skeet/csharp/miscutil
    Of course, there are plenty of others around too.

    Jon



  • tosco

    The easiest way is using the thread pool. The delegate required to use this method only allows one argument, so you have to define a new class to hold any data needed.



    using System.Threading;

    class RunQueryArguments
    {
        public string cliente;
        public string segundos;
    }

    public void atribui_valor(string cliente, string segundos)
    {

        RunQueryArguments arg = new RunQueryArguments();
        arg.cliente = cliente;
        arg.segundos = segundos;

        ThreadPool.QueueUserWorkItem(new WaitCallback(RunQuery), arg);
    }

    private void RunQuery(object state)
    {
        RunQueryArguments arg = (RunQueryArguments) state;
       
        string sql="ADDLOCALIDADE";
        SqlCommand cmd=
    new SqlCommand(sql, conn);
        conn.Open();
        cmd.ExecuteNonQuery();
        conn.Close();
    }

     



  • Running a procedure in background !