Установите пользовательский CommandTimeout по умолчанию для всех новых объектов Command

Значение по умолчанию CommandTimeout составляет 30 секунд. Вы можете вручную изменить значение экземпляра объекта команды, выполнив следующие действия.

Dim cmd As New System.Data.SqlClient.SqlCommand
cmd.CommandTimeout = 60

Есть ли способ указать другое значение по умолчанию, чтобы все новые объекты команд автоматически имели это значение в вашем решении при их создании?


person KyleMit    schedule 06.08.2013    source источник
comment
Связанный вопрос (Не помечен как dup, есть некоторые существенные различия в этих вопросах imo, даже если ответы на оба одинаковые. )   -  person Frédéric    schedule 21.01.2016


Ответы (1)


Насколько мне известно, нет возможности изменить это значение по умолчанию. Код конструктора для SqlCommand следующий:

public SqlCommand()
{
    this.ObjectID = Interlocked.Increment(ref _objectTypeCount);
    this._commandTimeout = 30;
    this._updatedRowSource = UpdateRowSource.Both;
    this._prepareHandle = -1;
    this._rowsAffected = -1;
    this._notificationAutoEnlist = true;
    GC.SuppressFinalize(this);
}

Возможный обходной путь - использовать предопределенный SqlCommand, переданный в качестве аргумента конструктору, который принимает SqlCommand в качестве аргумента.

Итак, вы можете создать глобальный SqlCommand (шаблон)

 Dim commandTemplate60 = new SqlCommand()
 commandTemplate60.Timeout = 60

а затем, когда вам понадобится команда с таймаутом 60 секунд

Dim cmd As New System.Data.SqlClient.SqlCommand(commandTemplate60)

Однако прямая установка тайм-аута, похоже, не представляет большого труда.

person Steve    schedule 06.08.2013
comment
Непостоянное значение для значения по умолчанию ._commandTimeout = 30;? - person Kiquenet; 24.07.2018