2012-01-09 7 views
57

Sto provando a eseguire i backup SQL attraverso una procedura memorizzata tramite Dapper (il resto della mia app utilizza Dapper quindi preferirei che questa porzione continuasse anche su questa parte). Funziona bene fino a quando il CommandTimeout calci.Regolazione del comando Timeout in Dapper.NET?

using (var c = SqlConnection(connstring)) 
{ 
    c.Open(); 
    var p = new DynamicParameters(); 
    // fill out p 

    c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure); 
} 

L'unica impostazione CommandTimeout che conosco è in SqlCommand. C'è un modo per impostare questo via Dapper?

+1

Per qualsiasi motivo, non posso rispondere alla mia domanda proprio ora. Ma sembra che l'aggiunta dell'argomento con nome "commandTimeout: 0" a c.Execute() si sia occupata di questo. –

risposta

62

Sì, esistono più versioni della funzione Esegui. Uno (o più) di essi contiene i parametri CommandTimeOut:

public static int Execute(this IDbConnection cnn, string sql, 
       dynamic param = null, IDbTransaction transaction = null, 
          int? commandTimeout = null, CommandType? commandType = null) 

Tratto da SqlMapper.cs

+2

Ho avuto lo stesso problema, ma con il metodo Query, tuttavia la soluzione ha funzionato anche per questo, poiché ha anche un parametro commandTimeout. – jahu

+0

Dalla mia esperienza la proprietà commandTimeout non viene utilizzata quando si utilizza async come atteso nella documentazione di msdn (https://goo.gl/2NVlXL). Un po 'di pungiglione spero che aiuti. –

+2

@DrSchizo perché non dovrebbe essere usato, non c'è motivo per Async Await per evitare il timeout –

27

Esempio dalla domanda iniziale con risposta accettata aggiunto, nel caso qualcuno lo vuole. (Timeout è impostato su 60 secondi):

using (var c = SqlConnection(connstring)) 
{ 
    c.Open(); 
    var p = new DynamicParameters(); 
    // fill out p 

    c.Execute("xp_backup_database", p, commandTimeout: 60, commandType: CommandType.StoredProcedure); 
} 
+0

Grazie a @JeroenK. Codice modificato –