113

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を介してこれを設定する方法はありますか?

4

4 に答える 4

122

はい、実行関数には複数のバージョンがあります。それらの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から取得

于 2012-01-09T21:22:44.853 に答える
66

誰かが望む場合に備えて、受け入れられた回答が追加された元の質問の例。(タイムアウトは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);
}
于 2015-08-13T18:38:40.953 に答える
38

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

Dapper.SqlMapper.Settings.CommandTimeout = 0;

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

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

于 2020-06-30T10:25:47.643 に答える
3

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

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
于 2020-07-03T19:19:11.957 に答える