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
어떤 이유로 든 지금은 내 질문에 답할 수 없습니다. 그러나 c.Execute ()에 "commandTimeout : 0"이라는 명명 된 인수를 추가하는 것만으로도이 문제를 해결 한 것 같습니다.
sh-beta

답변:


106

예, 여러 버전의 실행 기능이 있습니다. 그중 하나 이상은 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

2
이 사용할 수 없습니다 이유 @DrSchizo, 비동기 기다리고 있습니다이 밖으로 시간을 피하기 위해 이유가 없다
Mrinal Kamboj

1
@DrSchizo 문서는 비동기 / 대기 대신 BeginExecuteReader와 같은 비동기 메서드와 함께 사용되지 않는다고 말합니다. BeginExecuteReader를 사용하는 경우 자체 시간 제한 논리를 사용한다고 가정하기 때문이라고 가정합니다.
jugg1es dec.

3
모든 쿼리에 대해이 시간 제한을 설정할 수 있습니까? 나는 시도했지만 SqlConnection.ConnectionTimeout Property읽기 전용이라고 말합니다. 일부 사용자 지정 마이그레이션 프로그램에 필요합니다. 모든 문장에 입력하는 것은 지루합니다.
Tadej

5
@jedatkinports SqlMapper.Settings.CommandTimeout 나는 당신이 추구하는 것이라고 믿습니다.
Shiv

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

연결을 사용하여 문제를 해결할 수있었습니다.

int timeOutInSeconds = 60;
.
.
.
result = conn.Query<list>(stringQuery, new {parameters, ..}, null, true, timeOutInSeconds).ToList();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.