Errore Timeout

martedì 21 aprile 2015 - 08.41
Tag Elenco Tags  VB.NET  |  SQL Server 2008 R2  |  SQL Server 2005  |  SQL Server Express

Fantazma Profilo | Junior Member

Salve a tutti.
Ho un'applicazione vb.net che si appoggia come basi dati su SQL server versione express. Le versioni del database su cui si manifestano i problemi sono sia la 2005 che la 2008. In pratica, saltuariamente e senza alcun apparente motivo (che deve esserci per forza... ) mi si presenta questo errore di timeout:

System.Data.SqlClient.SqlException: Timeout. Il tempo disponibile è scaduto prima del completamento dell'operazione o il server non risponde.
in System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
in System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
in System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
in System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
in System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
in System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt, Boolean trustServerCert, Boolean& marsCapable)
in System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject, Boolean withFailover)
in System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject, Boolean withFailover)
in System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
in System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
in System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
in System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
in System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
in System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
in System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
in System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
in System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
in System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
in System.Data.SqlClient.SqlConnection.Open()
in System.Data.Common.DbDataAdapter.QuietOpen(IDbConnection connection, ConnectionState& originalState)
in System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
in System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
in System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)

La cosa inquietante è che a volte questo errore si presenta anche sulla macchina che ospita il server SQL!!! Quindi comincio a pensare che o ho sbagliato qualcosa nella logica dell'applicazione oppure il server fa fatica a rispondere e si genera un timeout... voi cosa ne pensate?

Vi ringrazio e spero di non aver sbagliato a postare qui e non nella sezione del VB.NET!!!

A presto, Fabio

mmjc23 Profilo | Newbie

Provo a risponderTi io...(non sono di certo un esperto)

Sembrerebbe proprio un problema di Timeout.
Se esegui il comando SQL mediante la classe "SqlCommand", esiste la proprietà "CommandTimeout"
Di default è 30 secondi e, se impostata a "0", indica che non c'è nessun limite di timeout (ma si rischia che ti blocchi l'applicazione se il comando non viene terminato)

Buona serata

Fantazma Profilo | Junior Member

Ciao, ti ringrazio per il suggerimento, ma avevo già provveduto a mettere a 45 secondi il timeout nella stringa di connessione... dovrei allungare ancora questo periodo?

mmjc23 Profilo | Newbie

Dipende da quanto tempo ci mette SQL a completare il comando/l'istruzione/la query che gli fai eseguire.
Se puoi, prova a far eseguire l'istruzione ad SQL (mediante, ad esempio, lo strumento "Management Studio" di SQL) e vedi quanto tempo ci mette per completare il comando.

Buona giornata
Ciao

Fantazma Profilo | Junior Member

Ciao,
ti ringrazio per il consiglio e mi scuso per il ritardo nella risposta. Il fatto è che questo errore si presenta anche per semplici query di inserimento con 5 o 6 parametri o per query di update con 10 o 12 parametri... non si tratta di select molto complicate.
Può essere dovuto ad un sovraccarico del pc sul quale risiede SQL?

Grazie ancora per l'aiuto!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5