Вы пытаетесь подключиться к SQL Server, и это занимает больше времени, чем ADO.NET готов ждать.
Попробуйте подключиться к тому же серверу, используя то же имя пользователя и пароль, используя SQL Server Management Studio. Если вы получаете ту же ошибку, либо что-то не так с вашей строкой соединения, указанный вами сервер не работает, либо вы не можете получить доступ к серверу через сеть, где бы вы ни находились (возможно, вы используете публичный IP-адрес). адрес пытается получить доступ к внутреннему имени сервера). Я не могу вспомнить сценарий, в котором вы вводите тот же сервер и учетные данные в SSMS и подключаетесь, затем делаете то же самое в ADO.NET и терпите неудачу.
Если вы находитесь в медленной сети, вы можете попробовать увеличить значение тайм-аута. Однако, если соединение вообще произойдет, оно должно произойти довольно быстро.
Ознакомьтесь с настройками собственного клиента SQL и настройками сервера SQL на сервере. Есть раздел для разрешенных протоколов; SQL может подключаться с использованием различных протоколов. Обычно вам требуется TCP / IP для сервера в сети и именованные каналы для сервера, работающего на вашем компьютере.
РЕДАКТИРОВАТЬ ИЗ КОММЕНТАРИИ: О, это нормально; случается все время. Время от времени в сети TCP пакеты «сталкиваются» или «теряются» при передаче. Это известная слабость технологий коммутации пакетов, которые в большинстве случаев управляются самим протоколом TCP. Один случай, когда его нелегко обнаружить, - это когда первоначальный запрос на соединение теряется в случайном порядке. В этом случае сервер не знает, что был запрос, а клиент не знал, что его запрос не был получен. Итак, все, что может сделать клиент, это сдаться.
Чтобы сделать вашу программу более надежной, все, что вам нужно сделать, это ожидать один или два сбоя и просто повторить запрос. Вот основной алгоритм для этого:
SqlDataAdapter sqlClearQuestDefects;
short retries = 0;
while(true)
{
try
{
sqlClearQuestDefects = new SqlDataAdapter(sql, "Data Source=ab;Initial Catalog=ac;User ID=ad; Password =aa");
break;
}
catch(Exception)
{
retries++;
//will try a total of three times before giving up
if(retries >2) throw;
}
}