2016-05-13 8 views
2

私は、クエリを実行し、テーブルからID値のリストを取得するにはDapperのを使用しています:Dapperの "ハンドシェイク" データベースエラー

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 

クエリ()呼び出しがエラーを与えている:

"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

ここから

を "この問題はfalseにパラメータ『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

ここで注目すべきことはありません。私はあなたのconnectionがまだ開かれていないと仮定しています。この場合、dapperは必要なときにOpen()を呼び出し、おそらくエラーが発生していると思われます。しかし、エラーそのものは大まかなものとは何の関係もありません。それはとなります。ここではOpenと呼ばれます(async APIを使用している場合はOpenAsync)。 Open()を独自のコードに移動すると、まったく同じ動作になると強く思っています。

+0

おかげでマルク。意味をなさない私は確認します – unnknown