0

エラーのあるクエリの実行時に、SQL Server からメッセージ番号と重大度レベルの情報を取得したいと考えています。

たとえば、ユーザーが別のレコードによって参照されている行を削除しようとし、カスケード関係が「アクションなし」の場合、アプリケーションでエラー メッセージ 547 (「DELETE ステートメントが競合しています。 REFERENCE 制約...") を作成し、ユーザーフレンドリーでローカライズされたメッセージをユーザーに返します。

このようなクエリを SQL Server で直接実行すると、次のメッセージが出力されます。

Msg 547, Level 16, State 0, Line 1
<Error message...>

Asp.Net アプリでは、この情報はイベント ハンドラー パラメーターまたは他の場所で利用できますか?

また、SQL Server メッセージ番号の決定的なリファレンスがどこにあるのか、誰も知らないと思いますか?

4

3 に答える 3

5

確かに-スローされるSqlExceptionがSQLServerで問題が発生していることを確認してください。

これには、以下を含む一連のプロパティを含むSqlError要素のコレクションが含まれています。

  • Class SQLServerから返されたエラーの重大度レベルを取得します。
  • LineNumber エラーを含むTransact-SQLコマンドバッチまたはストアドプロシージャ内の行番号を取得します。
  • Messageエラーを説明するテキストを取得します。
  • Number エラーのタイプを識別する番号を取得します。
  • Procedure エラーを生成したストアドプロシージャまたはリモートプロシージャコール(RPC)の名前を取得します。
  • Server エラーを生成したSQLServerのインスタンスの名前を取得します。
  • Source エラーを生成したプロバイダーの名前を取得します。
  • State エラー、警告、または「データが見つかりません」というメッセージを表す数値エラーコードをSQLServerから取得します。
于 2010-06-09T16:17:59.470 に答える
1

これを試して、すべてのメッセージが何であるかを確認してください

SELECT *
FROM master.dbo.sysmessages
于 2010-06-09T16:15:11.123 に答える
1

SQL Server エラー メッセージは次の場所にあります。master.dbo.sysmessages

ASP.NET で例外を SQLException としてキャッチすると、エラー番号とメッセージが表示されます。

複数の SQL エラーが発生する可能性があるため、SQL エラーを反復処理することをお勧めします。

(未テスト)

try
{
// Do some stuff here
}
catch (SQLException sqlex)
{
foreach (SqlError error in sqlex.Errors)
{
Console.WriteLine(error.Number.ToString());
Console.WriteLine(error.Message.ToString());
}
}
catch (Exception ex)
{
}
于 2010-06-09T16:20:22.170 に答える