Errore di TableAdapter solo durante il traffico intenso
-
03-07-2019 - |
Domanda
Sto lavorando al progetto di qualcun altro che fa un uso intenso di TableAdapters. Il sito funziona ma aggiunge regolarmente una voce nel registro eventi:
" ExecuteReader richiede un open e connessione disponibile. La connessione è lo stato corrente si sta connettendo. & Quot;
Il sito non genera un'eccezione, tuttavia, a meno che non vi sia un traffico elevato (oltre 5 richieste al secondo), l'eccezione è la stessa, indicando questa riga di codice:
this.Adapter.Fill(dataTable);
Traccia stack: at System.Data.SqlClient.SqlConnection.GetOpenConnection (String metodo) a System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute (String metodo, comando SqlCommand)
Come posso interrompere questo errore? Grazie.
Si è scoperto che stavo ottenendo solo metà dell'immagine, l'errore, quando avrebbe generato un errore è:
" Esiste già un DataReader aperto associato a questo comando quale deve essere chiuso per primo. "
Soluzione
Direi che probabilmente stai usando la stessa connessione per più scopi e uno di loro si sta chiudendo con un altro thread.
Consiglio di aggiungere qualche traccia per capire cosa sta succedendo. È difficile eseguire il debug di questo tipo di errori, quelli che si ottengono solo durante la produzione :(
Altri suggerimenti
Se sembra che tu abbia superato il numero consentito di connessioni aperte al tuo database. Questo può essere impostato nella stringa di connessione fornendo valori per i valori Dimensione min pool e Dimensione pool max. Penso che i valori predefiniti siano 0 per Dimensione min pool e 100 per Dimensione max pool, ma non ne sono sicuro.
Prova a cambiarli e vedi se aiuta.