Vb.net “整洁”;“握手”;数据库错误

Vb.net “整洁”;“握手”;数据库错误,vb.net,dapper,Vb.net,Dapper,我正在使用Dapper从表中查询并获取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.mySys

我正在使用Dapper从表中查询并获取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()调用给出了一个错误:

“连接超时已过期。尝试使用预登录握手确认时超时。这可能是因为预登录握手失败或服务器无法及时响应。尝试连接到此服务器时所用的时间为-[预登录]初始化=6;握手=629;”

我在谷歌上搜索了这个错误,但并没有发现与它有多大关系。有什么想法吗?我认为我的查询方式是正确的,但我是否遗漏了什么


注意,当发生此错误时,如果我继续,它似乎会重试并连接良好。我之所以注意到这个错误,是因为我在调试时破坏了异常。它只发生在第一个数据库连接上,对.Query()的所有其他后续调用都不会发生异常。我想知道Dapper到底是怎么回事,因为在尝试Dapper之前,我一直在进行常规ADO.NET查询,但当时我没有注意到这个错误。

Dapper在这里没有做任何显著的事情。我假设您的
连接
尚未打开,在这种情况下,dapper会在需要时调用
Open()
,大概就是在出现错误时。但是:错误本身与整洁无关。它实际上只是在这里调用
Open
(或者
OpenAsync
,如果您使用的是
async
API)。如果将
Open()
移动到自己的代码中,我强烈怀疑您会得到完全相同的行为。

“可以通过修改连接字符串将参数“TransparentNetworkIPResolution”设置为false来解决此问题”

从这里开始:


谢谢你,马克。有道理。我会检查这是否有效!但我不明白为什么,因为我的解决方案中的所有项目都是针对.NET4.0的,但这意味着问题在于.NET4.6.1