従来のいくつかの方法によるASPエラーの捕捉
エラーの種類は大きく分けて3つあります。
コンパイルエラーです。
このエラーは、通常、コードの構文に問題があるために発生します。
コンパイルエラーによりASPの実行が停止しました。
実行エラー
ASPを実行しようとしたときに発生するエラーです。
例えば、ある変数に値を代入しようとしたが、その変数に許される範囲外であった場合。
ロジックエラー
論理エラーは最も検出が困難なものです。コンピュータが検出できない構造的なエラーであることが多いのです。
そのためには、自分たちのコードを徹底的に調べる必要があります。
コンパイルエラーはロジックエラーと一緒に発生し、大抵は表示されるので、心配なのは実行時のエラーだけです。すべてASPを終了させ、ユーザーに非常に不親切なテキストを大量に投下します。
では、ランタイムエラーにどう対処すればいいのか!?ASPが提供してくれる唯一のエラーコマンドであるOn Error Resume Next(初心者のための注意点ですが、ASPにはOn Error Resume Next文しかありません、On Error Resume Goto文はありません)On Error Resume Next文を使わなければ、すべてのランタイムエラーは致命的で、その後、ユーザーにエラーコードが「表示」されてASPプログラムは停止してしまいます。
以下は、エラーコードです。
/{br
Microsoft OLE DB Provider for ODBC Drivers エラー 80004005
[Microsoft][ODBC Driver Manager] データソース名が見つからず、デフォルトドライバが指定されない
/test.asp, line 60
{
/
プログラムの先頭でOn Error Resume Nextステートメントを使用すると、すべてのエラーが無視され、自動的に次のステートメントが実行されます。こうすれば、プログラムは完全に実行され、ユーザーはエラーの後のエラーメッセージを見ることはありません。しかし、この方法では、プログラムが思ったように実行されない場合、何が悪かったのかを見つけるのが難しいという欠点があるので、必要なところでエラーに対処する必要があります。
エラー処理
ASPでエラーを処理する最善の方法は、プログラムの一番下にエラーを処理するコードを配置することです。また、すべてのASPプログラムでバッファを使用することをお勧めします。そうすれば、エラーが発生した場合、ページが停止し、ページの内容がクリアされるので、ユーザーはエラーメッセージを見ることはなく、あなたへの苦情も少なくなりますよ。以下はその例です。
<%@ LANGUAGE="VBScript" %>
<% 'Set buffer to True
Response.Buffer = True
'Start error handling
On Error Resume Next
%>
<% 'Error processing
If Err.Number <> 0 Then
'Clear the page
Response.Clear
'Show error message to user
%>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY BGCOLOR="#C0C0C0">
<FONT FACE="ARIAL">An error occurred in the execution of this ASP page<BR>
Please report the following information to the support desk<P>
<B>Page Error Object</B><BR>
Error Number: <%= Err.Number %><BR>
Error Message: <%= Err.Description %><BR>
Error file: <%= Err.Source %><BR>
Error Line: <%= Err.Line %><BR>
</FONT>
</BODY>
</HTML>
<%End If%>
上にあるように、まずOn Error Resume Nextを設定して、エラーが発生してもプログラムの実行に影響が出ないようにしています。
エラー処理とデータベース
エラー処理にデータベースの実行を加えると複雑です。例えば、データベースにレコードを追加するコマンドがたくさんあるプログラムがあったとして、insert/updateがプログラムの一番下で実行され、先にエラーが発生したら終わり!?データベースにエラーメッセージを追加していたはずです。On Error Resume Next を使っているので、全て無視されます! このプログラムは、前にエラーがあっても、データベースにデータを追加します。
{前のエラーが発生しても、プログラムはデータベースにデータを追加します。
これを避けるためには、まず何かをしなければならないのですが、その正しい対処法は次の通りです。
If Err.Number = 0 And objConnection.Errors.Count = 0 Then
'The statement can only be executed here because there are no errors
Set rstResults = dbData.Execute(txtSql)
End If
より高度な処理
また、エラーが発生した場合、さらにエラーメッセージを表示することもできます。ここでは、データベースエラーとページエラーの両方を処理する例を示します。この例では、プログラム内のすべてのエラーを一度に見つけることができます。(問題発生時に英語の方が言いやすいと思うところがあるので、翻訳していません)。
<%
If Err.Number <> 0 Then
Response.Clear
Select Case Err.Number
Case 8 'Specify the Number of the error
'Handle custom errors here
Case Else 'General error
If IsObject(objConnection) Then
If objConnection.Errors.Count > 0 Then
%>
<B>Database Connection Object</B>
<% For intLoop = 0 To objConnection.Errors.Count - 1 %>
Error No: <%= objConnection.Errors(intLoop).Number %><BR>
Description: <%= objConnection.Errors(intLoop).Description %><BR>
Source: <%= objConnection.Errors(intLoop).Source %><BR>
SQLState: <%= objConnection.Errors(intLoop).SQLState %><BR>
NativeError: <%= objConnection.Errors(intLoop).NativeError %><P>
<% Next
End If
End If
If Err.Number <> 0 Then
%>
<B>Page Error Object</B><BR>
Error Number <%= Err.Number %><BR>
Error Description <%= Err.Description %><BR>
Source <%= Err.Source %><BR>
LineNumber <%= Err.Line %><P>
<% End If
End Select
End If
%>
上記の例では、私たちの日常のプログラミングでよく使われるデータベースで発生する問題の多くに対処することが可能です また、特定のエラーを処理することができるSelect Case文も見ておきましょう。
リダイレクトとエラー処理
注意しなければならないのは、よく使うリダイレクトオブジェクトです。ページ内にリダイレクトオブジェクトがあると、エラー処理の意味がなくなってしまう。そこで、次のように、リダイレクトの前に処理する必要がある。
If Err.Number = 0 And objConnection.Errors.Count = 0 Then
Response.Clear
Response.Redirect ?lt;URL Here>?
End If
コードをすっきりさせる
コードをすっきりさせるために、まず、エラー処理ファイルをインクルードファイルの中に入れてください。こうすることで、どのファイルでも使用することができます。また、この方法で簡単に修正することができます。
プログラムの先頭にOn Error Resume Next文を(もちろん言語宣言の後に)追加してください。
SQLを実行する前に、エラーがないか確認します。
リダイレクトを使用する前にも、エラー処理を行う。
エラー処理を行うインクルードファイルは、コードの先頭に置くようにしましょう
関連
-
プロセス分析によるhttpsリクエストのチャールズベースクローリング
-
提案内容を改善するために、データベースを実行するaspプログラムの効率化
-
Webform 組み込みオブジェクト セッションオブジェクト、アプリケーショングローバルオブジェクト、ViewState 詳細
-
aspとphpの時限式ページ生成のためのアイデアとコード
-
iis7でaspの行番号が不正確な問題の解決法
-
perl スクリプティング スタディガイド - 読書メモ
-
2つのファイルを比較し、データをフィルタリングするスクリプトコード(perlで実装されている
-
perlのsrand()とtime関数の使い方の紹介
-
コンストラクタでのPerlメソッド使用法入門
-
PerlのSort関数の使い方まとめと使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
指定したフォルダーにあるリンク切れファイルのシンボリックリンクを自動的に削除するスクリプト
-
ファイルが存在するかどうかを判断するasp関数
-
aspで仮想ディレクトリのルートパスを取得するコード
-
C言語による配列への要素の追加と削除
-
asp createTextFileはutf8をサポートしたテキストファイルを生成します。
-
ASPでは、.NETのStringオブジェクトと同様に、文字部分に対してPadLeftとPadRightの関数が実装されています。
-
aspのドメインアクセス制限コード
-
Perl の Getopt::Long モジュールを使用して、ユーザーのコマンドライン引数を受け取ります。
-
Perl 変数の使い方を説明するための Perl 構文
-
重複するコンテンツ(重複する行+重複するフィールドの配列)を削除するための perl スクリプトコード