Próbuję uruchomić kopie zapasowe SQL za pomocą procedury składowanej za pośrednictwem Dapper (reszta mojej aplikacji korzysta z Dapper, więc wolałbym, aby ta część również przez nią działała). Działa dobrze, dopóki nie włączy się CommandTimeout.
using (var c = SqlConnection(connstring))
{
c.Open();
var p = new DynamicParameters();
// fill out p
c.Execute("xp_backup_database", p, commandType: CommandType.StoredProcedure);
}
Jedyne ustawienie CommandTimeout, o którym wiem, znajduje się w SqlCommand. Czy istnieje sposób, aby to ustawić przez Dapper?
Odpowiedzi:
Tak, istnieje wiele wersji funkcji Wykonaj. Jeden (lub więcej) z nich zawiera parametry commandTimeout:
public static int Execute(this IDbConnection cnn, string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null)
Zaczerpnięte z SqlMapper.cs
źródło
SqlConnection.ConnectionTimeout Property
ale mówi, że jest tylko do odczytu. Potrzebowałbym go do niektórych niestandardowych programów do migracji. Pisanie tego z każdym poleceniem jest żmudne.Przykład z oryginalnego pytania z dodaną akceptowaną odpowiedzią na wypadek, gdyby ktoś chciał. (Limit czasu jest ustawiony na 60 sekund):
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); }
źródło
Nie ma potrzeby ustawiania limitu czasu polecenia dla wszystkich zapytań / wywołań Db. Możesz ustawić globalnie, jak poniżej.
Dapper.SqlMapper.Settings.CommandTimeout = 0;
Tę właściwość statyczną można zainicjować podczas ładowania aplikacji lub w konstruktorze klasy bazy danych.
Pomaga to w usuwaniu duplikatów, a jeśli zdecydujesz się to zmienić później, możesz to zmienić raz.
źródło
Udało mi się rozwiązać mój problem za pomocą connection.Query ustawiając bezpośrednio limit czasu
int timeOutInSeconds = 60; . . . result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
źródło