Изменение времени ожидания SqlConnection


Я пытаюсь переопределить значение по умолчанию SqlConnection тайм-аут 15 секунд и получаю сообщение об ошибке говоря, что

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

есть ли способ обойти это?

using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
   connection.Open();

   using (SqlCommand command = connection.CreateCommand())
   {
       command.CommandType = CommandType.StoredProcedure;
       connection.ConnectionTimeout = 180; // This is not working 
       command.CommandText = "sproc_StoreData";
       command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
       command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);

       command.ExecuteNonQuery();
    }
}
7 60

7 ответов:

Если вы хотите предоставить тайм-аут для конкретного запроса, то CommandTimeout - это путь вперед.

использование:

command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.

вы можете установить значение тайм-аута в строке подключения, но после подключения он доступен только для чтения. Вы можете прочитать больше на http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx

Как Anil подразумевает, ConnectionTimeout может быть не то, что вам нужно; он контролирует, как долго драйвер ADO будет ждать при установлении нового соединения. Ваше использование, похоже, указывает на необходимость ждать дольше, чем обычно для конкретного SQL-запроса, чтобы выполните, и в этом случае Anil точно прав; используйте CommandTimeout (который является R/W), чтобы изменить ожидаемое время завершения для отдельной команды SqlCommand.

вы всегда можете добавить его в строку подключения:

connect timeout=180;

более чистый способ-установить connectionString в xml-файле, например Web.Confing(WepApplication) или App.Config(StandAloneApplication).

 <connectionStrings>
    <remove name="myConn"/>
    <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/>
  </connectionStrings>

по коду вы можете получить соединение таким образом:

public static SqlConnection getConnection()
{
        string conn = string.Empty;
        conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString;
        SqlConnection aConnection = new SqlConnection(conn);
        return aConnection;
}

вы можете установить ConnectionTimeout только вы создаете экземпляр. Когда экземпляр создается, вы не изменяете это значение.

старый пост, но поскольку он подходит для того, что я искал, я подумал, что добавлю некоторую информацию в эту тему. Я собирался добавить комментарий, но у меня недостаточно репутации.

Как уже сказали:

подключение.ConnectionTimeout используется для начального соединения

.CommandTimeout используется для отдельных поисковых запросов, обновлений и т. д.

но:

подключение.ConnectionTimeout - это и используется для совершения и откат транзакций.

Да, это абсолютно безумное дизайнерское решение.

Итак, если вы используете тайм-аут при фиксации или откате, вам нужно будет увеличить это значение через строку подключения.

вы можете добавить Connection Timeout=180; в строке подключения

вы должны использовать command.CommandTimeout