Dapper“Handshake”数据库错误

时间:2016-05-13 22:04:24

标签: 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.mySystems").ToList()
End Using

Query()调用发出错误:

  

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

我用谷歌搜索了这个错误但是没有找到与Dapper有关的事情。有任何想法吗?我认为我正在进行查询的方式是正确的,但我错过了什么吗?

注意,当这个错误发生时,如果我恢复,那么它似乎重试并连接正常。我只注意到这个错误,因为我在调试时打破了异常。它只发生在第一个数据库连接上,对.Query()的所有其他后续调用都没有执行异常。我想知道Dapper在幕后发生了什么,因为我在尝试Dapper之前一直在做常规的ADO.NET查询,而我当时没有注意到这个错误。

2 个答案:

答案 0 :(得分:1)

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

从这里开始:

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

答案 1 :(得分:0)

Dapper在这里做的并不了什么。我假设您的connection尚未打开 - 在这种情况下,dapper会在需要时调用Open(),并且可能是错误时调用Open。但是:错误本身与小巧玲珑无关。如果你正在使用OpenAsync API,字面只是在这里调用async(或Open()。如果您将var x = $($(".example")[0]).position(); //array 1 [0] alert("Top: " + x.top + " Left: " + x.left); 移动到自己的代码中,我强烈怀疑您会得到完全相同的行为。