Я пытаюсь запустить резервное копирование SQL через хранимую процедуру через Dapper (остальная часть моего приложения использует Dapper, поэтому я бы предпочел, чтобы эта часть также выполнялась через нее). Он отлично работает, пока не сработает CommandTimeout.
using (var c = SqlConnection(connstring))
{
c.Open();
var p = new DynamicParameters();
// fill out p
c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}
Единственный известный мне параметр CommandTimeout находится в SqlCommand. Есть ли способ установить это через Dapper?
Ответы:
Да, существует несколько версий функции Execute. Один (или несколько) из них содержит параметры commandTimeout:
public static int Execute(this IDbConnection cnn, string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
Взято из SqlMapper.cs
источник
SqlConnection.ConnectionTimeout Property
но там написано, что он доступен только для чтения. Мне он понадобится для некоторых пользовательских программ миграции. Утомительно набирать его с каждым утверждением.Пример из исходного вопроса с добавленным принятым ответом, если кто-то этого хочет. (Тайм-аут установлен на 60 секунд):
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); }
источник
Нет необходимости устанавливать тайм-аут команды для всех запросов / вызовов БД. Вы можете установить глобально, как показано ниже.
Dapper.SqlMapper.Settings.CommandTimeout = 0;
Вы можете инициализировать это статическое свойство при загрузке приложения или в конструкторе класса базы данных.
Это помогает удалить дублирование, и, если вы решите изменить его позже, вы измените его один раз.
источник
Мне удалось решить свою проблему с помощью подключения.Запрос, установив тайм-аут напрямую
int timeOutInSeconds = 60; . . . result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
источник