Dapper.NETでCommandTimeoutを調整しますか?


92

Dapperを介してストアドプロシージャを介してSQLバックアップを実行しようとしています(アプリの残りの部分は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を介してこれを設定する方法はありますか?


1
どういうわけか、今は自分の質問に答えられません。しかし、名前付き引数「commandTimeout:0」をc.Execute()に追加するだけでこれが処理されたようです。
sh-beta

回答:


106

はい、実行機能には複数のバージョンがあります。それらの1つ(または複数)には、commandTimeoutパラメーターが含まれています。

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

SqlMapper.csから取得


4
同じ問題が発生しましたが、Queryメソッドを使用しましたが、commandTimeoutパラメーターもあるため、ソリューションも機能しました。
jahu 2015年

2
@DrSchizoなぜそれが使用されないのか、AsyncAwaitがタイムアウトを回避する理由はありません
Mrinal Kamboj 2017年

1
@DrSchizoドキュメントによると、async / awaitではなく、BeginExecuteReaderなどの非同期メソッドでは使用されていません。これは、BeginExecuteReaderを使用する場合、独自のタイムアウトロジックを使用することが想定されているためだと思います。
jugg1es 2017

3
すべてのクエリにこのタイムアウトを設定することは可能ですか?試してみましたSqlConnection.ConnectionTimeout Propertyが、読み取り専用と書いてあります。一部のカスタム移行プログラムで必要になります。すべてのステートメントで入力するのは面倒です。
タデイ

5
@ jedatkinportsSqlMapper.Settings.CommandTimeout私はあなたが求めているものだと信じています。
シブ2018

59

誰かがそれを望む場合に備えて、受け入れられた答えが追加された元の質問からの例。(タイムアウトは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);
}

6

すべてのクエリ/ Db呼び出しにコマンドタイムアウトを設定する必要はありません。以下のようにグローバルに設定できます。

Dapper.SqlMapper.Settings.CommandTimeout = 0;

この静的プロパティは、アプリケーションのロード時またはデータベースクラスコンストラクターで初期化できます。

これは重複を取り除くのに役立ち、後で変更することにした場合は、一度変更します。


0

タイムアウトを直接設定するconnection.Queryを使用して問題を解決することができました

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.