Active Server Pages で SQL Server にアクセスする方法

概要

この資料では、ActiveX Data Objects (ADO) を使用して ASP スクリプトで SQL Server への接続を確立し、ODBC 3.0 の接続プール機能を利用する方法について説明します。

詳細

接続プール

ODBC の接続プールを有効にします。

接続プール、およびこの機能を有効にする方法の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
164221 [INFO] ODBC アプリケーションで接続プールを有効にする方法

ODBC DSN

ODBC アドミニストレータを使用して、Microsoft Internet Information Server (IIS) がインストールされているコンピュータ上にシステム データ ソース名 (DSN) を作成します。いったん接続の属性を指定したら、それをすべてのページで再利用します。たとえば、Global.asa ファイルの Session_OnStart イベントで、次のように接続の属性を定義します。
   Session("ConnectionString") =
"dsn=SQLSysDSN;uid=<username>;pwd=<strong password>;DATABASE=pubs;APP=ASP Script"
以下のすべての条件を満たしていることを確認します。
  • システム DSN の定義で信頼関係接続が指定されていないこと
  • SQL Server のセキュリティ モードが Windows NT 統合になっていないこと
  • 接続の属性で、uid が空白になっていないこと
条件が満たされていない場合、SQL Server でエラーが発生し、次のエラー メッセージが表示されます。
Microsoft OLE DB provider for ODBC Drivers (0x80004005)

[Microsoft][ODBC SQL Server Driver][SQL Server] ユーザー 'User Name' のログインに失敗しました。

理由 : SQL Server の信頼関係接続の有効なユーザーとして定義されていません。

Global.asa

Global.asa ファイルの使用は必須ではありません。通常このファイルに記述するエントリは、アプリケーションで最初に呼び出されるページに記述することができます。ASP スクリプトが、インターネット サービス マネージャで仮想ディレクトリとして定義されているフォルダではなく、他の仮想ディレクトリのフォルダ内にある場合、セッション変数および DSN の定義が含まれている Global.asa ファイルは、この仮想ディレクトリに保存されている必要があります。この条件が満たされていない場合、次のエラー メッセージが表示されます。
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバ

が見つかりません。

ASP スクリプト内での接続

すべての Active Server Pages でデータベースへの接続の開始と終了を行って、接続プールを利用します。接続を開くには、ページの <Body> セクションに以下のステートメントを入力します。
   <%
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open Session("ConnectionString") %>
接続を閉じるには、</Body> タグの直後に以下のステートメントを入力します。
   <%
OBJdbConnection.Close
Set OBJdbConnection = Nothing
%>
接続の設定が、この資料の前半に記載されているように適切に定義されていない場合、以下の 2 つのエラー メッセージが表示されることがあります。
Microsoft OLE DB Provider for ODBC Drivers (80004005)
[Microsoft][ODBC SQL Server Driver][DBNMPNTW] 接続が解除されました。
または
Microsoft OLE DB Provider for ODBC Drivers (80004005)
[Microsoft][ODBC SQL Server Driver] コミュニケーション リンクが失敗しました。

Global.asa と Authors.asp ファイルで構成されたアプリケーションの例を示します。このサンプル アプリケーションでは、pubs データベースの authors テーブル内の 4 つの列に関して全レコードが返されます。


: このコードを実行する前に、Global.asa ファイルの UID <username> および pwd =<strong password> を適切な値に変更する必要があります。UID に、データベースでこの操作を実行するための適切なアクセス許可があることを確認してください。


Global.asa
   <SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Session_OnStart
Session("ConnectionString") =
"DSN=SQLSysDSN;UID=<username>;PWD=<strong password>;DATABASE=pubs;APP=ASP script"
Session("ConnectionTimeout") = 15
Session("CommandTimeout") = 30
End Sub

Sub Session_OnEnd

End Sub
</SCRIPT>
Authors.asp
   <HTML>
<HEAD>
<TITLE>All Authors</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">

<% Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.ConnectionTimeout = Session("ConnectionTimeout")
OBJdbConnection.CommandTimeout = Session("CommandTimeout")
OBJdbConnection.Open Session("ConnectionString")
Set SQLStmt = Server.CreateObject("ADODB.Command")
Set RS = Server.CreateObject ("ADODB.Recordset")
%>

<p>
<table border="0" bordercolor="#000000">
<%
SQLStmt.CommandText = "select * from authors"
SQLStmt.CommandType = 1
Set SQLStmt.ActiveConnection = OBJdbConnection
RS.Open SQLStmt

Do While Not RS.EOF
%>
<TR>
<TD Width = 150 ALIGN=LEFT>
<FONT SIZE=+1>
<%= RS("au_id") %>
</FONT></TD>
<TD></TD>
<TD Width = 150 ALIGN=LEFT>
<FONT SIZE=+1>
<%= RS("au_lname") %>
</FONT></TD>
<TD Width = 150 ALIGN=LEFT>
<FONT SIZE=+1>
<%= RS("au_fname") %>
</FONT></TD>
<TD Width = 150 ALIGN=LEFT>
<FONT SIZE=+1>
<%= RS("phone") %>
</FONT></TD>
</TR>
<%
RS.MoveNext
Loop
%>
</table>
<hr>
<p>
</BODY>
<% OBJdbConnection.Close
Set OBJdbConnection = Nothing
%>
</HTML>
Active Server Pages の関連情報については、IIS サーバーの ASP セットアップ プログラムのロードマップを参照してください。

関連情報

この資料に記載されていない質問については、以下の Microsoft SQL Server ニュースグループを参照してください。
Microsoft SQL Server の「サポート技術情報」 (Microsoft Knowledge Base) の資料に関するコメントは、Q169377 にお寄せください。
プロパティ

文書番号:169377 - 最終更新日: 2011/06/06 - リビジョン: 1

フィードバック