2012-06-20 3 views
2

Сначала я отсоединяю сетевой кабель.SQL-соединение не синхронизируется быстро при отключении сетевого кабеля

Затем я пытаюсь подключиться к SQL Server внутри C# с использованием объекта SqlClient.SqlConnection и строку соединения, либо не указывать тайм-аут соединения (и, следовательно, по умолчанию 15 секунд): Integrated Security=SSPI;Persist Security Info=False;Data Source=MYSERVER;Database=MYDB"

или соединение строка, которая задает тайм-аут, даже короче через 5 секунд: "Integrated Security=SSPI;Persist Security Info=False;Data Source=MYSERVER;Database=MYDB;Connect Timeout=5"

В любом случае, вызов connection.Open возвращается через 42 секунды с моей ошибкой таймаута. Если я снова подключу свой сетевой кабель раньше, я могу спровоцировать ошибку раньше. Почему таймаут соединения не имеет эффекта? Это где-то документально? Есть ли способ обойти это?

+0

Я предполагаю, что он ищет тайм-аут SQL на основе найденного SQL-поля (чистого тайм-аута SQL). Тайм-аут сети раздельный. Вы можете выполнить ping, прежде чем пытаться подключиться. – Paparazzi

ответ

2

Connect Timeout применяется ТОЛЬКО, когда он способен разрешить сервер и ждет подключения.

Как и в MSDN, Connect Timeout - это время (в секундах - по умолчанию 15), чтобы дождаться соединения с сервером до прекращения попытки и возникновения ошибки.

Примечание:
5 секунд слишком мало для сетевого оборудования для обнаружения сети, доступной или нет. Это должно быть не менее 10 секунд.

+0

Спасибо за информацию. Есть ли способ тайм-аута менее чем за 42 секунды, которые я вижу, если нет сетевого подключения? – user12861

+0

Прежде чем приступать к подключению, вы можете выполнить ping ip sql server machine. См. Http://www.makhaly.net/Blog/11 –

+0

Я полагаю, что это сработает, но я не хочу, чтобы каждый раз пинги, и даже если бы я делал, все еще есть состояние гонки. Если бы был какой-то способ установить истинный тайм-аут, это было бы хорошо. Возможно, у них просто нет этой функции для SqlConnection. – user12861

Смежные вопросы