6

.NET 3.5 アプリのログで を取得しています。SqlException対応する番号 (プロパティの値) を探していますSqlException.Number

System.Data.SqlClient.SqlException: A transport-level error has occurred 
when receiving results from the server. (provider: TCP Provider, error: 0 
- The specified network name is no longer available.) at
System.Data.SqlClient.SqlConnection.OnError

次のようなエラーも表示されます。

System.Data.SqlClient.SqlException: A network-related or instance-specific error 
occurred while establishing a connection to SQL Server. The server was not found 
or was not accessible. Verify that the instance name is correct and that SQL Server
is configured to allow remote connections.

これらの例外を適切にキャッチする方法を知っている人はいますか? (ここに回答を投稿することもできます)

4

3 に答える 3

5

その特定のエラーは、接続の問題であるため、SQL Server の sys.messages から発生するものではありません。そのため、手元に番号がありません。

TBH、あなたがすべき最善のことは、番号が例外を除いてログに書き出されることを確認することです-そうすれば、ログに常に番号とメッセージが並んでいます. あなたの現在の質問には答えられないかもしれませんが、それは今後の最善の私見です。それだけでなくSqlException.Number、このような場合、実際に必要なものかもしれないSqlException.ErrorCodeと思います(チェックしないとわかりません)。.ErrorCode

于 2010-02-15T13:14:00.947 に答える
4

これに関連する SQL エラー番号は見つかりません。簡単に言えば、サーバーへの接続に問題があったためにエラーが発生したということです。

コードは SQL Server に接続できないため、報告する SQL エラーはありません。

SQLException.Numberに関する MSDN の記事から:

This number corresponds to an entry in the master.dbo.sysmessages table.

SQL エラー番号が関連付けられていない例外については、例外オブジェクトのErrorCodeプロパティにある Windows HRESULT エラー コードを使用できる場合があります。

于 2010-02-15T13:05:44.713 に答える
2

皆さん、SqlException には .Number がないとやみくもに主張する前に、実際の例外スタックを調べてください。これは、一部の MSDN ページにボイラープレート テキストがあるからです。.ErrorCode は通常、1 つの汎用値 (プライベート CTOR によって設定) を取得します。この特定のエラーについては、ここで例外スタックを確認できます。

http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/cb61ec85-c0d4-4a26-90e0-8c98cd28332f

それに従うと、準備中のコードがすべてを埋めていることがわかりますが、リフレクターで実際のエラー番号をトレースするのは少し複雑です。

したがって、次に何かを見た人は誰でも、実際のエラー番号 (または番号) を投稿してください。これらのエラーは非常にまれで一時的なものである傾向があり、サーバーが接続の問題を認識した時点で番号を追跡するには遅すぎるため、番号を取得することをお勧めします。

于 2010-07-23T09:52:06.497 に答える