2016-05-13 3 views
2

Я использую щеголеватый для запроса и получить список значений ID из таблицы:Щеголеватый базы данных "Рукопожатие" ошибка

Dim systemIDs As IEnumerable(Of Long) = Nothing 

Dim connString As String = GetMyConnectionString() 
Using connection As New SqlConnection(connString) 
    systemIDs = connection.Query(Of Long)("SELECT systemIDs FROM dbo.mySystems").ToList() 
End Using 

Вызов Query() дает ошибку:

"Connection Timeout Expired. The timeout period elapsed while attempting to consume the pre-login handshake acknowledgement. This could be because the pre-login handshake failed or the server was unable to respond back in time. The duration spent while attempting to connect to this server was - [Pre-Login] initialization=6; handshake=629;"

Я ошибся в этой ошибке, но я не слишком много отношусь к Dapper. Есть идеи? Я думал, что я делаю запрос правильно, но я чего-то не хватает?

Обратите внимание, что при возникновении этой ошибки, если я возобновляю, то, похоже, повторится и подключится нормально. Я заметил эту ошибку только потому, что во время отладки я нарушаю исключения. Это происходит только при первом соединении с базой данных, а все остальные последующие вызовы .Query() не делают исключения. Мне интересно, что происходит с Dapper под капотом, потому что я делал регулярные запросы ADO.NET, прежде чем попытался Dapper, и тогда я не заметил эту ошибку.

ответ

1

«Эта проблема может быть решена путем изменения строки подключения, чтобы установить параметр„TransparentNetworkIPResolution“ложь»

здесь:

https://blogs.msdn.microsoft.com/dataaccesstechnologies/2016/05/07/connection-timeout-issue-with-net-framework-4-6-1-transparentnetworkipresolution/

+1

Это сработало! Но я не понимаю, почему, потому что все проекты в моем решении нацелены на .net 4.0, но это говорит о том, что проблема связана с .net 4.6.1 – unnknown

0

Dapper здесь ничего не делает. Я предполагаю, что ваш connection здесь еще не был открыт - в этом случае dapper звонит Open(), когда ему это нужно, и, предположительно, это когда это ошибка. Но: сама ошибка не имеет ничего общего с dapper. Это буквально просто вызывает Open здесь (или OpenAsync, если вы используете API async). Я сильно подозреваю, что вы получите точно такое же поведение, если переместите Open() в свой собственный код.

+0

Благодаря Марк. Имеет смысл. Я проверю – unnknown

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