2012-01-09 44 views
57

我試圖通過存儲過程通過Dapper運行SQL備份(我的應用程序的其餘部分使用Dapper,所以我寧願讓這部分也通過它運行)。它工作得很好,直到CommandTimeout啓動。在Dapper.NET中調整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設置的方法?

+1

無論出於何種原因,我現在無法回答我自己的問題。但它似乎只是添加命名參數「commandTimeout:0」c.Execute()照顧這一點。 – 2012-01-09 21:15:07

回答

62

是的,有多個版本的執行功能。他們中的一個(或多個)包含的CommandTimeout參數:

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

SqlMapper.cs

+2

我有同樣的問題,但與查詢方法,但解決方案也爲它工作,因爲它也有一個commandTimeout參數。 – jahu 2015-05-12 09:11:56

+0

根據我的經驗,當使用msdn文檔(https://goo.gl/2NVlXL)中所述的async await時,不會使用commandTimeout屬性。一個刺的位希望它有幫助。 – 2015-09-14 07:31:34

+2

@DrSchizo爲什麼不使用它,沒有理由異步等待,以避免超時 – 2017-03-31 06:49:48

27

例子取自原來的問題與接受的答案加入,以防有人想它。 (超時設置爲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); 
} 
+0

謝謝@JeroenK。編輯的代碼。 – 2015-08-14 18:00:26