XMLとデータベース
ADO、ASPとの連携について
(株)日本ユニテック
竹内 理
目次<全10ページ>
10.STEP8:サーバー、クライアント間でレコードセットをやり取りする(ADO+IIS+DOMの連携)
おわりに
|
STEP8:応用2、サーバー、クライアント間でレコードセットをやり取りする(ADO+IIS+DOMの連携)
次は、ADO、IIS、DOMを連携させてサーバーとクライアントの間でレコードセットをやり取りする処理を行ってみましょう。Sample7.aspとget.htmという2つのファイルを使用します。サーバ側(Sample7.asp)でRecordsetオブジェクトを用いてデータベースに更新処理を行い、その結果をクライアント側(get.htm)に表示します。
まずSample7.aspが行うのは次のような処理です。
- サーバー側でデータベースに接続し、レコードセットを生成する。
- Recordset.addNewメソッドを使用し、レコードセットに新しいレコードを追加する。
- Recordset.Saveメソッドを使用し、更新情報を含むレコードセットをResponseオブジェクトに永続化する。
- Recordset.UpdateBatchメソッドを使用し、更新内容をデータベースに反映する。
また、get.htmが行うのは次のような処理です。
- Recordset.openメソッドを使用してSample7.aspが出力する永続化されたレコードセットからRecordsetオブジェクトを開く。
- Recordset.Saveメソッドを使用してレコードセットをDOMオブジェクトに永続化する。
- DOMを使用してSample7.aspで追加されたレコードを取得し、表示する。
ではそれぞれのソースの中を見てみましょう。まずはSample7.aspです。
<%@ language="VBscript" %>
<object id="rs" progid="ADODB.Recordset" runat="Server"></object>
<%
Option Explicit
Response.Buffer = true
Dim strSQL,strConn
Response.ContentType="text/xml"
Response.write "<?xml version='1.0' encoding='UTF-8'?>"
Response.Expires= 0
rs.LockType = 4 '①ロックタイプを指定する
rs.CursorType = 1
strSQL = "select * from person"
strConn = "DSN=adotest;UID=;PWD=;DATABASE="
rs.Open strSQL,strConn '②データベースからデータを取得
rs.addnew() '③新しいデータをレコードセットに追加する
rs.fields("Name")="E.Hemingway"
rs.fields("Age")="45"
rs.Save Response,1 '④レコードセットをResponseオブジェクトに永続化
rs.UpdateBatch '⑤レコードセットの更新内容をデータベースに反映する
rs.Close
%>
|
<リスト10.sample7.asp>
①ではレコードセットのrockTypeプロパティを設定します。今回はBatchモードでの更新をかけるので4を指定します。②ではいつものようにデータベースから値を取得します。③ではRecordset.addnewメソッドを使用してレコードセットに新しいレコードを追加します。④ではレコードセットをResponseオブジェクトに永続化します。そして⑤でRecordset.Updatebatchメソッドを使用してレコードセットの更新内容をデータベースに反映します。
では次にget.htmを見てみましょう。
<!doctype HTML public "-//w3c//dtd html 4.0 transitional//en">
<HTML>
<HEAD>
</HEAD>
<BODY>
<SCRIPT LANGUAGE="JScript">
var rs = new ActiveXObject("ADODB.Recordset");
var xmldoc = new ActiveXObject("microsoft.XMLDOM");
xmldoc.async = false;
rs.open("http://oemcomputer/adotest/Sample7.asp");//①Sample7.aspをロード
rs.save(xmldoc,1);//②レコードセットをDOMに永続化
var ndlt=xmldoc.getElementsByTagName("rs:insert");//③新しく追加された要素の情報を取得する
var insdNd = ndlt.item(0).firstChild;
document.write("<H1>追加したレコードの情報</H1>")
document.write("<TABLE BORDER='1'><TR><TD>Added Name</TD><TD>Added Age</TD></TR>");
document.write("<TR><TD>"+insdNd.getAttribute("Name")+"</TD>");
document.write("<TD>"+insdNd.getAttribute("Age")+"</TD></TR>");
document.write("</TABLE>");
rs.close;
</SCRIPT>
</BODY>
</HTML>
|
<リスト11.get.htm>
①ではRecordset.openメソッドを使用してSample7.aspがResponseオブジェクトに永続化したレコードセットをRecordsetに開きます。Openメソッドの引数にSample.aspファイルのURLをそのまま指定していることに注意してください。②ではRecordset.saveメソッドを使用してレコードセットをDOMに永続化します。③ではDOMのメソッドを使用してレコードセット内の新しく追加されたレコードの情報を取得しています。xmldoc.getElementsByTagName("rs:insert")としているのは、STEP3で触れたように更新情報がrs:insert要素の中に収められているからです。
では、ブラウザでget.htmをロードして見ましょう。次のように表示されれば成功です。
これは、Sample7.aspで"E.Hemingway"、"45"というデータがレコードセットに追加されたことを示しています。また、元のデータベースのPersonテーブルには”E.Hemingway”、”45”というレコードが追加されているはずです。
おわりに
このセクションでみてきたように、ADOを使えばデータベースとXMLの連携が非常に簡単に行えます。また、ADOがXMLの処理に関連してさまざまな可能性を持っていることも実感されたはずです。
このセクションでは基本的なことを中心に学んできましたが、さらに工夫次第で実際の業務にかかわるさまざまな処理に応用できるはずです。そしてADOのように広く一般に使われているコンポーネントがXMLのサポートを進めることは、これからのXMLのさらなる普及に貢献するものとなるでしょう。
関連キーワード: ADO
関連キーワード: ASP
関連キーワード: DOM
関連キーワード: IIS
関連キーワード: データベース
|