Изменение времени ожидания 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 ответов
Если вы хотите предоставить тайм-аут для определенного запроса, то 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.
более чистый способ-установить 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
только вы создаете экземпляр.
Когда instance is create, вы не изменяете это значение.
старый пост, но когда он подходит для того, что я искал, я подумал, что добавлю некоторую информацию к этой теме. Я собирался добавить комментарий, но у меня недостаточно репутации.
Как уже сказали:
подключение.ConnectionTimeout используется для начального соединения
.CommandTimeout используется для отдельных поисковых запросов, обновлений и т. д.но:
подключение.ConnectionTimeout является и используется для совершения и откат транзакций.
Да, это абсолютно безумное дизайнерское решение.
Итак, если вы используете тайм-аут при фиксации или откате, вам нужно будет увеличить это значение через строку подключения.