Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ServiceStack OrmLite Command Timeout

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("...");
like image 375
Alex Avatar asked Mar 12 '13 05:03

Alex


2 Answers

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;
like image 70
mythz Avatar answered Nov 02 '22 08:11

mythz


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
like image 41
Moo-Juice Avatar answered Nov 02 '22 10:11

Moo-Juice