System.Data.SqlClient.SqlExceptionがネットワークエラー(MS SQL Serverに接続している.NET環境)が原因であるかどうかをテストできる必要があります。もしそうなら、私は彼の接続に問題があることをユーザーに伝えることができますが、そうでない場合は、別の方法で扱われるべき私のコードのバグである可能性が高いです。明らかに、誤検知が発生しないことが重要です(バグの場合はネットワークの問題を宣言します)。
ここでの関連する質問では、例外テキストから情報を抽出することが提案されました。私の場合、テキストがローカライズされており、環境によって異なる可能性があるため、これは醜くて難しいです。
とりあえず、(経験上)ネットワークの問題に関連する特定の関数呼び出しの呼び出しスタックを調べます。
System.Data.SqlClient.TdsParserStateObject.WritePacket
System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket
System.Net.Sockets.SocketException
ただし、SELECTクエリなどの実行中にタイムアウトが発生した場合、これらはいずれもポップアップしません。そこで、例外メッセージに「タイムアウト」が表示されるかどうかのチェックに戻る必要がありますが、これは醜いです。
誰かがもっと良いアイデアを持っていますか?