开发者

Trouble Calling Stored Procedure from BackgroundWorker

开发者 https://www.devze.com 2023-01-23 04:44 出处:网络
I\'m in ASP.NET MVC and am (mostly) using Entity Framework.I want to call a stored procedure without waiting for it to finish.My current approach is to use a background worker.Trouble is, it works fin

I'm in ASP.NET MVC and am (mostly) using Entity Framework. I want to call a stored procedure without waiting for it to finish. My current approach is to use a background worker. Trouble is, it works fine without using the background worker, but fails to execute with it.

In the DoWork event handler when I call command.ExecuteNonQuery(); it just "disappears" (never gets to next line in debug mode). Anyone have tips on calling a sproc asynchronously? BTW, it'll be SQL Azure in production if that matters; for now SQL Server 2008.

    public 开发者_如何学编程void ExecAsyncUpdateMemberScoreRecalc(MemberScoreRecalcInstruction instruction)
    {
        var bw = new BackgroundWorker();
        bw.DoWork += new DoWorkEventHandler(AsyncUpdateMemberScoreRecalc_DoWork);
        bw.WorkerReportsProgress = false;
        bw.WorkerSupportsCancellation = false;
        bw.RunWorkerAsync(instruction);
    }


    private void AsyncUpdateMemberScoreRecalc_DoWork(object sender, DoWorkEventArgs e)
    {
        var instruction = (MemberScoreRecalcInstruction)e.Argument;

        string connectionString = string.Empty;
        using (var sprocEntities = new DSAsyncSprocEntities())  // getting the connection string
        {
            connectionString = sprocEntities.Connection.ConnectionString;
        }

        using (var connection = new EntityConnection(connectionString))
        {
            connection.Open();
            EntityCommand command = connection.CreateCommand();
            command.CommandText = DSConstants.Sproc_MemberScoreRecalc;
            command.CommandType = CommandType.StoredProcedure;
            command.Parameters.AddWithValue(DSConstants.Sproc_MemberScoreRecalc_Param_SageUserId, instruction.SageUserId);
            command.Parameters.AddWithValue(DSConstants.Sproc_MemberScoreRecalc_Param_EventType, instruction.EventType);
            command.Parameters.AddWithValue(DSConstants.Sproc_MemberScoreRecalc_Param_EventCode, instruction.EventCode);
            command.Parameters.AddWithValue(DSConstants.Sproc_MemberScoreRecalc_Param_EventParamId, instruction.EventParamId);

            int result = 0;
            //  NEVER RETURNS FROM RUNNING NEXT LINE (and never executes)... yet it works if I do the same thing directly in the main thread.
            result = command.ExecuteNonQuery();
        }
    }


Add a try catch around the call and see if any exceptions are caught and are thus aborting the thread.

try {
     result = command.ExecuteNonQuery();
} catch(Exception ex) {
   // Log this error and if needed handle or 
   throw;
}
0

精彩评论

暂无评论...
验证码 换一张
取 消