0

ASP.Net ページを実行しようとすると、次のエラーが発生します。開発中に発生しただけで、原因がわかりません。

「OverflowException が発生しました。値が Int32 に対して大きすぎるか小さすぎます。」

デバッガーが中断する行はまったく役に立ちません

Dim ApproxDate As TextBox = FormView1.FindControl("CurrentResultDateTextBox")

FormView1 で findControl を呼び出すと、データバインド (SQL クエリを実行してデータセットを返す) が発生するため、この行でエラーが発生しています。エラーはオブジェクト データ ソースのいずれか、またはページのグリッド ビューのいずれかにあると思いますが、デバッガーはどこにあるかを教えてくれません。ほとんどのページ データ ソースは宣言的にバインドされます (ソースの ASP タグで指定)。

F11 を押して例外を過ぎて実行すると、次のように表示されます。

「13712696100373320501120906 は Int32 の有効な値ではありません。」

ここに表示されている値は、ページで使用されるメイン SQL テーブルの主キーです。このフィールドを使用するデータ ソースは約 10 あります。繰り返しますが、エラーが発生している正確な場所を示すものはありません。

では、このようなエラーをどのようにデバッグできますか? 実行できるコマンドはありますか? IIS エラー ログ? エラーをキャプチャするためのサードパーティ製ソフトウェア? 取れるものは何でも取ります

4

1 に答える 1

0

問題を見つけることができました。秘訣は、最初に IDE/デバッグ設定で「自分のコードのみ」を無効にすることです。次に、コール スタックでシステム関数を確認できます。ソース コードはありませんが、これらの関数をクリックして、スタックを Web コントロールの 1 つ (この場合は ListControl.PerformSelect 関数) に巻き戻すことができます。

デバッグ ウィンドウで自動変数を確認すると、エラーに関係するコントロールが表示されます。そこから、ID プロパティにウォッチを追加して、それがどのコントロールであるかを確認し、それをフィードするデータ ソースを調べて、エラーを見つけました。

また、スタックを ObjectDataSourceView に巻き戻し、dataTable プロパティを確認し、GetErrors() を呼び出して問題を確認することもできます。これは、エラーのフラグを立てているデータ行の配列を返します。プロパティ RowError は、特定の行のエラー メッセージを表示します。

于 2013-01-24T11:20:12.090 に答える