6

When using IDbConnection.ExecuteSql how do I set the Command Timeout?

IDbConnection db = ConnectionFactory.OpenDbConnection();
db.ExecuteSql("...");

If I use the IDbCommand.ExecuteSql ( See below ) method I can set the Command Timeout, but I get a bunch of warnings about deprecated methods.

IDbCommand comm = db.CreateCommand()
comm.CommandTimeout = 240;                    
comm.ExecuteSql("...");

2 Answers 2

4

With the most recent change OrmLite no longer provides APIs around the IDbCommand object directly (which have now all been made internal in the latest version).

But since OrmLite is only extension methods over ADO.NET's underlying IDbConnection and IDbCommand interfaces, you can easily by-pass OrmLite's extension methods when you need to and just use them directly, e.g:

IDbConnection db = ConnectionFactory.OpenDbConnection();
IDbCommand cmd = db.CreateCommand();
cmd.CommandTimeout = 240;  
cmd.CommandText = "...";
cmd.ExecuteNonQuery();

Alternatively you can set a global CommandTimeout with:

OrmLiteConfig.CommandTimeout = 240;
Sign up to request clarification or add additional context in comments.

6 Comments

What if we want to use sql generated by db.Select. When we want to set timeout, we should use custom handwritten sql queries ? @mythz
@mustafasturan, having same issue... I use IDbConnection.Query<> and I need to specify the timeout of that.
Is this still the best solution? It seems like if you set the CommandTimeout paramater on the connection string that all commands created using that dbconnection should use the supplied timeout. Is there a possiblity of this behavior being changed?
@on3al I've updated answer to include OrmLiteConfig.CommandTimeout example
Are there any plans to allow it to be set, non globally? I was hoping to allow consumers of an api to set it per request
|
4

A bit late to the party and as you've seen in my comment, I've had this exact issue. My solution was to extend on myth's suggestion and create a new extension method:

public static partial class IDbConnectionExtensionMethods
{
    public static List<T> Query<T>(this IDbConnection self, string sql, int commandTimeout)
    {
        List<T> results = null;
        self.Exec((dbCmd) =>
            {
                dbCmd.CommandTimeout = commandTimeout;
                dbCmd.CommandText = sql;
                using (var reader = dbCmd.ExecuteReader())
                {
                    results = reader.ConvertToList<T>();
                }
            });

        return results;
    }   // eo Query<T>
}   // eo class IDbConnectionExtensionMethods

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.