Подтвердить что ты не робот

Изменение тайм-аута 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();
    }
}
4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

connect timeout=180;

Ответ 4

Более чистый способ - установить 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 только для создания экземпляра. Когда экземпляр создается, вы не изменяете это значение.

Ответ 5

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

Ответ 6

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

Как говорили другие:

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

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

Но:

connection.ConnectionTimeout также используется для совершения транзакций и их откат.

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

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

Ответ 7

Вам нужно использовать command.CommandTimeout

Ответ 8

Вы также можете использовать SqlConnectionStringBuilder

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString);
builder.ConnectTimeout = 10;
using (var connection = new SqlConnection(builder.ToString()))
{
    // code goes here
}

Ответ 9

Вы можете установить время ожидания соединения на уровень соединения и уровень команд.

Добавьте "Connection Timeout = 10" в строку подключения. Теперь время ожидания соединения составляет 10 секунд.

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10";
using (var con = new SqlConnection(connectionString))
{

}

Установите для свойства CommandTimeout значение SqlCommand

var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword";
using (var con = new SqlConnection(connectionString))
{

    using (var cmd =new SqlCommand())
    {
        cmd.CommandTimeout = 10;
    }

}