SQL Server ストアド プロシージャを呼び出して ASP でデータベース操作を実行することはすでに慣れていますが、デスクトップ レベルのデータベース Access でストアド プロシージャを作成して使用することもできることをご存知ですか?
Access + ASP は、シンプル、高速、互換性のある軽量 Web アプリケーションの開発に最適な組み合わせですが、通常はパフォーマンスが高くありません。また、ADODB.Connection オブジェクトや Recordset オブジェクトを使用して SQL ステートメントを実行する場合、パラメータ付きの SQL ステートメントのパラメータ値が文字列に結合されることが多く、シングルクォーテーションなどの問題が発生するため、いくつかの不便な点があります。ストアド プロシージャを使用する利点の 1 つは、SQL ステートメントのパラメータ値の追加の提供をサポートしていることです。
実際、Access (2000 以降) のいわゆるストアド プロシージャは、SQL Server のストアド プロシージャと比較できません。ストアド プロシージャ Lite としかみなせません。複数の SQL ステートメントはサポートしていません。論理ステートメントはサポートしていません (笑、結局 T-SQL ではありません)。プリコンパイルされているかどうかはまだわかりません。ただし、VBScript によって実装されたいわゆるクラスがカプセル化されているだけで、コード構造の美化とプログラムの再利用性が大幅に促進されるのと同様に、Access の軽量ストアド プロシージャも、データベース操作の標準化とエラー確率の最小化に役立ち、パフォーマンスが向上する可能性があります。
以下では、Access でストアド プロシージャを作成し、それを ASP プログラムで使用する方法を段階的に説明します。
(1) Accessでストアドプロシージャを作成する
皆さんが Access をどれだけ使いこなしているかはわかりませんが、私にとっては、MDB データベース ファイルを作成するための単なるツールであり、Access インターフェイスでテーブル、インデックス、制約などを作成します。終わった〜
Access のクエリはストアド プロシージャの役割を果たします。以下で説明する Access ストアド プロシージャまたはクエリはすべてこれを指します。
クエリの作成のために、Access は VS.NET で DataAdapter を作成するときのウィザードに似た愚かなツールを提供します。ただし、SQL コードを直接記述するのが好きです
次に、Access のメイン インターフェイスの左側にあるクエリ ボタンをクリックし、右側の [デザイン ビューでクエリを作成] をダブルクリックしてクエリ デザイン ビューを開きます。
この時点で、ビジュアル クエリ ビルダーがポップアップします。まず、SQL ステートメントに必要なテーブルを追加します。
テーブルを追加した後、デザイン ビューを右クリックし、[SQL ビュー]を選択して SQL コード編集ウィンドウに切り替えます。
さて、Access のストアド プロシージャの特徴について話しましょう。
私の現在の感覚では、Access クエリは SQL ステートメントのラッパーであり、プリコンパイルなどの最適化が行われている可能性があります。 SQL Server ストアド プロシージャを記述するように、複数の操作、トランザクション、論理的判断、ループなどを使用することはできません...
ただし、Access ストアド プロシージャを使用する主な目的は、追加のパラメータによって提供されるクエリを使用することです。ストアド プロシージャを使用すると、パラメータ値を SQL ステートメント文字列に結合するときに発生する次のようなさまざまな問題に直面する必要がなくなります。
コード:
ディムSQL
sql = SELECT * FROM ユーザー WHERE UserName = ' & userName & '
上記のコードでは、文字列変数 userName に一重引用符が含まれている場合、エラーが報告されます。手動で変換する必要があります。
コード:
ディムSQL
sql = SELECT * FROM Users WHERE UserName = ' & Replace(userName, ', '') & ' ' は 2 つの連続する一重引用符に変換されます
パラメータを指定したクエリを使用すると、SQL ステートメントは次のように記述できます。
コード:
ディムSQL
sql = SELECT * FROM ユーザー WHERE UserName = @userName
次に、Command オブジェクトの Parameter プロパティを使用してパラメーター @userName の値を渡すだけです。これは非常に便利で直感的です。
コード:
cmdあり
'パラメータオブジェクトの作成
.Parameters.Append .CreateParameter(@userName)
'各パラメータの値を指定
.Parameters(@userName) = ユーザー名
で終わる
ここでは、Access ストアド プロシージャでのパラメーターの使用についても説明します。 @ 変数を使用してパラメーターを指定し、同じ名前のパラメーター オブジェクトを渡す SQL Server のストアド プロシージャとは異なり、Access のパラメーターは名前ではなく順序によって識別されます。渡されるパラメータに名前を指定する必要はありません。SQL でのパラメータ名も、パラメータ値が渡される限り、任意に名前を付けることができます。ここではパラメータが SQL ステートメントに表示されます。通常、Command オブジェクトの Execute メソッドを使用し、パラメーター値の配列を直接渡して ~ を実行します。
コード:
cmd.Execute、Array(ユーザー名)
別の例として、Access ストアド プロシージャの 1 つは次のように記述されています。
コード:
select * from Users where UserName = p_UserName and BookTitle = p_bookTitle
パラメータ値の配列を正しい順序で渡すことで、このように行うことができます。
コード:
cmd.Execute、Array(ユーザー名、本のタイトル)
OK、この例で使用されている 2 つのクエリを見てみましょう。1 つはデータの書き込みです。 SQL ステートメントを作成したら、名前を付けて保存します。
データを読み取る別のストアド プロシージャ コード。
(2) ストアドプロシージャの使用
その後、これらのストアド プロシージャを ASP プログラムで呼び出すことができます。
ここで、Access のクエリがストアド プロシージャであると述べた理由がわかります。Command オブジェクトの CommandType プロパティは、ストアド プロシージャである 4 に設定されています。
それで...
次のコードは非常に単純です。
コード:
<%
明示的なオプション
ディムス
ランダム化
s = Rnd * 100
ディムコン、cmd
conn = Server.CreateObject(ADODB.Connection) を設定します
cmd = Server.CreateObject(ADODB.Command) を設定します。
conn.Open プロバイダー = Microsoft.Jet.OLEDB.4.0; データ ソース = & Server.MapPath(sp.mdb)
cmdあり
.ActiveConnection = 接続
.CommandType = &H0004 'ストアド プロシージャ
.CommandText = AddNewData
で終わる
cmd.Execute、Array(CStr(Now())、CSng(s))
cmdあり
.ActiveConnection = 接続
.CommandType = &H0004 'ストアド プロシージャ
.CommandText = GetData
で終わる
Dim resultRS、resultArray
resultRS = cmd.Execute(, Null) を設定します。
resultRS.EOF でない場合は、
resultArray = resultRS.GetRows()
終了する場合
resultRS = なしを設定します
cmd = なしを設定します
接続閉じる
conn = なしを設定します
応答.書き込み <ul>
ディムアイ
i = 0 の場合、UBound(resultArray, 2) へ
Response.Write <li> & resultArray(0, i)
Response.Write & resultArray(1, i)
Response.Write & resultArray(2, i)
応答.書き込み </li>
次
応答.書き込み </ul>
%>