Настройка времени ожидания для SQL Server - PullRequest
24 голосов
/ 30 августа 2009

Я использую VSTS 2008 + ADO.Net + C # + .Net 3.5 + SQL Server 2008. Я использую ADO.Net на стороне клиента, чтобы подключиться к серверу базы данных для выполнения процедуры сохранения, а затем вернуть результат из процедуры сохранения .

Вот мой код. У меня есть две проблемы с таймаутом,

  1. Если я не установлю явным образом какие-либо параметры, связанные с тайм-аутом, для подключения к серверу базы данных есть ли какие-либо настройки тайм-аута (например, если не удается подключиться к серверу базы данных в течение некоторого периода времени по умолчанию, будет некоторый тайм-аут исключение?)

  2. Если я не устанавливаю явным образом какие-либо настройки, связанные с тайм-аутом, для выполнения процедуры сохранения существуют ли какие-либо настройки тайм-аута (например, если не удается получить результаты с сервера клиенту ADO.Net в течение некоторого периода времени по умолчанию) , будет какое-то исключение тайм-аута?)?

        using (SqlConnection currentConnection = new SqlConnection("Data Source=.;Initial Catalog=TestDB;Trusted_Connection=true;Asynchronous Processing=true"))
        {
            // check current batch conut
            currentConnection.Open();
            using (SqlCommand RetrieveOrderCommand = new SqlCommand())
            {
                RetrieveOrderCommand.Connection = currentConnection;
                RetrieveOrderCommand.CommandType = CommandType.StoredProcedure;
                RetrieveOrderCommand.CommandText = "prc_GetOrders";
                RetrieveBatchCountCommand.Parameters.Add("@Count", SqlDbType.Int).Direction = ParameterDirection.Output;
                RetrieveBatchCountCommand.ExecuteNonQuery();
                int rowCount = Convert.ToInt32(RetrieveOrderCommand.Parameters["@Count"].Value);
            }
        }
    

Ответы [ 3 ]

43 голосов
/ 30 августа 2009

Как уже упоминалось, существует два типа таймаутов:

1) Тайм-аут соединения: это контролируется вашей строкой соединения:

Data Source=.;Initial Catalog=TestDB;
   Trusted_Connection=true;Asynchronous Processing=true

Если вы добавите Connect Timeout=120 к этой строке, ваше соединение будет в течение 120 секунд пытаться открыться, а затем прерываться.

Data Source=.;Initial Catalog=TestDB;
   Trusted_Connection=true;Asynchronous Processing=true;
   Connect Timeout=120;

2) Тайм-аут команды: для каждой команды вы также можете указать тайм-аут - ADO.NET будет ждать этого времени, прежде чем отменить свой запрос. Вы указываете это в объекте SqlCommand:

    using (SqlCommand RetrieveOrderCommand = new SqlCommand())
    {
       RetrieveOrderCommand.CommandTimeout = 150;
    }
13 голосов
/ 30 августа 2009

Да, есть 2 типа тайм-аута, которые можно установить

  1. Время ожидания подключения
  2. Тайм-аут команды

Оба по умолчанию 30 секунд в VBA, .net и т. Д.

0 голосов
/ 25 июня 2014

В sqlconnection классе есть свойство по имени ConnectionTimeout.

Это нельзя напрямую использовать для установки желаемого значения тайм-аута соединения, так как оно доступно только для чтения, т. Е. Реализовано только «get» и «set» не реализовано для этого свойства. Поэтому мы должны использовать ключевое слово «Connection Timeout» в строке соединения сам и установите желаемое значение.

EXI:

Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=SSPI;Connection Timeout=30";(30 means 30 seconds)

30 секунд - это максимальное время, которое дается для установления соединения с сервером (например, 172.160.0.2 ИЛИ что-то вроде ADMINISTRATOR\\SQLEXPRESS). Если он не может сразу установить соединение с сервером, он будет пытаться до 30 секунд.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...