I have been having a problem with a query against a SQL Server database timing out after 30 seconds. To address this I am now setting the Command timeout. However, I am still receiving a timeout exception after 30 seconds.
Could I be missing something?
private async Task<List<T>> GetRecordsForInsertAsync(CancellationToken token)
using (var destination = connectionFactory.CreateDestinationConnection())
var sql = //query
return await destination.SelectAsync<T>(sql, token: token).ConfigureAwait(false);
catch (Exception e)
CreateDestinationConnection() basically calls OrmLiteConnectionFactory.OpenDbConnection()
I think you'll need to use
OrmLiteConfig.CommandTimeout = ThreeMinutes.
SelectAsync will end up overriding the
CommandTimeout you set using
Is the code that you have linked to executed when I call
dbCmd.CommandTimeout = ormLiteConn != null
? (ormLiteConn.CommandTimeout ?? OrmLiteConfig.CommandTimeout)
If this code is executed when
SelectAsync is called and since I call SetCommandTimeout() on the connection then it seems that CommandTimeout that I have just set should be used and not the OrmLiteConfig default?
OK - I've cloned the repo and written a test and, by stepping through the code, can see that even though I am calling
SetCommandTimeout(180) the actual command timeout is being taken from
OrmLiteConfig.CommandTimeout i.e. 30 seconds.
Can I ask in what cases does
SetCommandTimeout have an effect?
public async Task Can_Set_CommandTimeout()
using (var db = OpenDbConnection())
@mythz can the assignments to CommandTimeout in the dbCmd extensions be removed? The timeout is already set in the exec filter - which only sets it to the default if it doesn't have a value.
Yep thanks for the pointer, doesn't need to reset in
ExecReaderAsync so I've removed it from this commit.