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 usa Dapper, así que preferiría mantener esta parte ejecutándose también). Funciona bien hasta que CommandTimeout se activa.
using (var c = SqlConnection(connstring))
{
c.Open();
var p = new DynamicParameters();
// fill out p
c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}
La única configuración de CommandTimeout que conozco está en SqlCommand. ¿Hay alguna forma de configurar esto a través de Dapper?
Respuestas:
Sí, existen varias 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
fuente
SqlConnection.ConnectionTimeout Property
pero dice que es de solo lectura. Lo necesitaría para algunos programas de migración personalizados. Es tedioso escribirlo con cada declaración.Ejemplo de la pregunta original con respuesta aceptada agregada, en caso de que alguien lo desee. (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); }
fuente
No es necesario establecer el tiempo de espera del comando para todas las consultas / llamadas a la base de datos. Puede configurar globalmente como a continuación.
Dapper.SqlMapper.Settings.CommandTimeout = 0;
Puede inicializar esta propiedad estática en la carga de la aplicación o en el constructor de la clase de base de datos.
Esto ayuda a eliminar la duplicación y, en caso de que decida cambiarlo más tarde, lo cambia una vez.
fuente
Pude resolver mi problema usando la conexión. Consulta configurando el tiempo de espera directamente
int timeOutInSeconds = 60; . . . result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
fuente