Oggetto SqlCommand: impostalo e dimenticalo?
-
10-07-2019 - |
Domanda
Sto usando l'oggetto SqlClient.SqlCommand per eseguire alcuni proc memorizzati sul mio db. Normalmente, quando li eseguo manualmente tramite Query Analyzer, il completamento richiede fino a 15 minuti.
Quindi ovviamente quando li eseguo usando l'oggetto SqlCommand ottengo un timeout SqlCommand.
So che potrei impostare la proprietà di timeout su un numero molto alto, ma mi chiedo se in alternativa c'è un modo per dare il via ai proc e disconnettersi. Non ho bisogno di un valore di ritorno.
Qualche suggerimento? Non mi interessa ottimizzare il tempo di elaborazione di ogni sp qui, sto solo cercando di determinare se esiste un'opzione 'imposta e dimentica'.
Ecco il contenuto dell'oggetto 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))
Soluzione
Puoi usare un metodo asincrono, come BeginExecuteNonQuery. Il timeout viene ignorato per questo.
Altri suggerimenti
Utilizza la chiamata del metodo asincrono BeginExecuteNonQuery. Da la pagina MSDN
La proprietà CommandTimeout verrà ignorata durante le chiamate di metodo asincrone come BeginExecuteReader.
Potresti eseguire quel codice da un thread in background. È possibile esaminare l'oggetto BackgroundWorker .