Dapper.NET'te CommandTimeout'u ayarlama?


92

Dapper aracılığıyla bir saklı yordam aracılığıyla SQL yedeklemelerini çalıştırmaya çalışıyorum (uygulamamın geri kalanı Dapper kullanıyor, bu nedenle bu bölümün de çalışmasını sürdürmeyi tercih ediyorum). CommandTimeout devreye girene kadar gayet iyi çalışıyor.

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

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

Bildiğim tek CommandTimeout ayarı SqlCommand'da. Bunu Dapper ile ayarlamanın bir yolu var mı?


1
Sebep ne olursa olsun, şu anda kendi soruma cevap veremiyorum. Ama öyle görünüyor ki, "commandTimeout: 0" adlı bağımsız değişkeni c.Execute () 'a eklemek bunu halletti.
sh-beta

Yanıtlar:


106

Evet, Yürütme işlevinin birden çok sürümü vardır. Bunlardan biri (veya daha fazlası) commandTimeout parametrelerini içerir:

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

Alındığı SqlMapper.cs


4
Aynı problemi yaşadım, ancak Query yöntemiyle, ancak çözüm de bir commandTimeout parametresine sahip olduğu için bunun için çalıştı.
jahu

2
@DrSchizo neden kullanılmasın ki, Zaman
Aşımını

1
@DrSchizo Dokümanlar, BeginExecuteReader gibi asenkron yöntemlerle kullanılmadığını söylüyor, asenkron / await değil. Bunun nedeni, BeginExecuteReader'ı kullanırsanız, kendi zaman aşımı mantığınızı kullanacağınız varsayılır.
jugg1es

3
Bu zaman aşımını tüm sorgular için ayarlamak mümkün mü? İle denedim SqlConnection.ConnectionTimeout Propertyama sadece okunduğunu söylüyor. Bazı özel geçiş programları için buna ihtiyacım olacak. Her ifadeyle yazmak yorucu.
Tadej

5
@jedatkinports SqlMapper.Settings.CommandTimeout Senin peşinde olduğun şeyin olduğuna inanıyorum.
Shiv

59

Herhangi birinin istemesi durumunda kabul edilen cevabı eklenmiş orijinal sorudan örnek. (Zaman aşımı 60 saniyeye ayarlanmıştır):

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);
}

6

Tüm sorgular / Db Çağrıları için komut zaman aşımını ayarlamaya gerek yoktur. Global olarak aşağıdaki gibi ayarlayabilirsiniz.

Dapper.SqlMapper.Settings.CommandTimeout = 0;

Bu statik özelliği uygulama yükünde veya veritabanı sınıfı yapıcısında başlatabilirsiniz.

Bu, çoğaltmanın kaldırılmasına yardımcı olur ve daha sonra değiştirmeye karar verirseniz bir kez değiştirirsiniz.


0

Bağlantıyı kullanarak sorunumu çözebildim.Sorgu zaman aşımını doğrudan ayarlıyor

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.