2012-01-09 6 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

私は今すぐ自分の質問に答えることができません。しかし、c.Execute()に名前付き引数 "commandTimeout:0"を追加するだけで、これが処理されたようです。 –

答えて

62

はい、複数のバージョンの実行機能があります。そのうちの一つ(またはそれ以上)がCOMMANDTIMEOUTパラメータが含まれています受け入れ答えと、元の質問からSqlMapper.cs

+2

私は同じ問題を抱えていましたが、Queryメソッドを使用しても、解決策はうまくいきました。 – jahu

+0

私の経験から、msdnのドキュメント(https://goo.gl/2NVlXL)に記載されているように、async awaitを使用すると、commandTimeoutプロパティは使用されません。刺客のビットが助けてくれることを願っています。 –

+2

@DrSchizoなぜ使用されないのでしょうか、Async Awaitがタイムアウトを避ける理由はありません –

27

例から撮影

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

は、誰もがそれを望んでいる場合には、追加。 (タイムアウトは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。編集されたコード。 –

関連する問題