2012-01-09 14 views
57

Estoy tratando de ejecutar copias de seguridad de SQL a través de un procedimiento almacenado a través de Dapper (el resto de mi aplicación utiliza Dapper, así que preferiría mantener esta porción ejecutándose a través de él también). Funciona muy bien hasta que la CommandTimeout entra en acción.¿Cómo ajustar CommandTimeout en 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); 
} 

El único ajuste CommandTimeout que conozco es en SqlCommand. ¿Hay alguna manera de configurar esto a través de Dapper?

+1

Por alguna razón, no puedo responder mi propia pregunta en este momento. Pero parece que solo se agrega el argumento llamado "commandTimeout: 0" a c.Execute() se encargó de esto. –

Respuesta

62

Sí, hay múltiples versiones de la función Ejecutar. Uno (o más) de ellos contiene los parámetros CommandTimeOut:

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

Tomado de SqlMapper.cs

+2

Tuve el mismo problema, pero con el método Query, sin embargo, la solución también funcionó, ya que también tiene un parámetro commandTimeout. – jahu

+0

Según mi experiencia, la propiedad commandTimeout no se usa cuando se usa async aguardar como se indica en la documentación de msdn (https://goo.gl/2NVlXL). Un poco de aguijón espero que ayude. –

+2

@DrSchizo por qué no se usaría, no hay razón para que Async aguarde para evitar el tiempo de espera –

27

Ejemplo de pregunta original con la respuesta aceptada añadió, por si alguien lo quiere. (El tiempo de espera se establece en 60 segundos):

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

Gracias @JeroenK. Código editado –