Objeto SqlCommand: ¿configurarlo y olvidarlo?
-
10-07-2019 - |
Pregunta
Estoy usando el objeto SqlClient.SqlCommand para ejecutar algunos procesos almacenados en mi base de datos. Normalmente, cuando los ejecuto manualmente a través del Analizador de consultas, tardan hasta 15 minutos en completarse.
Entonces, obviamente, cuando los ejecuto usando el objeto SqlCommand obtengo un tiempo de espera de SqlCommand.
Sé que podría establecer la propiedad de tiempo de espera en un número muy alto, pero me pregunto si, alternativamente, hay una manera de simplemente iniciar los procesos y desconectarse. No necesito un valor de retorno.
¿Alguna sugerencia? No estoy interesado en optimizar el tiempo de procesamiento de cada sp aquí, solo trato de determinar si hay una opción 'configurarlo y olvidarlo'.
Aquí está el contenido del 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))
Solución
Puede usar un método asíncrono, como BeginExecuteNonQuery. El tiempo de espera se ignora para eso.
Otros consejos
Use el método asincrónico para llamar a BeginExecuteNonQuery. Desde la página MSDN
La propiedad CommandTimeout se ignorará durante las llamadas a métodos asincrónicos como BeginExecuteReader.
Podría ejecutar ese código desde un hilo de fondo. Puede examinar el objeto BackgroundWorker .