Objeto SQLCommand - Defina -o e esqueça?
-
10-07-2019 - |
Pergunta
Estou usando o objeto SQLCLIENT.SQLCommand para executar alguns procs armazenados no meu banco de dados. Normalmente, quando eu os executo manualmente via analisador de consulta, eles levam até 15 minutos para serem concluídos.
Então, obviamente, quando os executo usando o objeto SQLCommand, recebo um tempo limite do SQLCommand.
Sei que poderia definir a propriedade de tempo limite para um número muito alto, mas estou me perguntando se, alternativamente, existe uma maneira de apenas iniciar os Procs e desconectar. Eu não preciso de um valor de retorno.
Alguma sugestão? Não estou interessado em otimizar o tempo de processamento de cada SP aqui, apenas tentando determinar se há uma opção 'Defina e esqueça'.
Aqui está o conteúdo do objeto SQLCommand:
using (SqlCommand cmd = new SqlCommand(@"update tbl_SYS_DATE set RPT_DATE = @inputDate
exec sp_Get_Bp_Data1
exec sp_Get_Bp_Data2
exec sp_Get_Bp_Data3
exec sp_channel_data1
exec sp_channel_data2
exec sp_channel_data3
", con))
Solução
Você pode usar um método assíncrono, como o BeginexecutenonQuery. O tempo limite é ignorado para isso.
Outras dicas
Use o método assíncrono chamado beginexecutenonQuery. A partir de A página do MSDN
A propriedade CommandTimeout será ignorada durante chamadas de método assíncrono, como o BEGINEXETEREADER.
Você pode executar esse código a partir de um encadeamento de segundo plano. Você pode olhar para o BackgroundWorker objeto.