|
Using ADO and
a DSN-LESS connection with Oracle Database for ASP Developer
Overview
ใน article นี้มีจุดประสงค์เพื่อ
1.แสดงการติดต่อใช้งาน Oracle Database
ด้วย ADO ในแบบ DSN-LESS
2.แสดงการเรียกใช้งาน Stored Function
สำหรับนักพัฒนา Web application ที่พัฒนาด้วย
Active Server Pages
System Environment
1.Oracle ODBC Driver version 8.01.07.00
2.Oracle Net8 8.1.7
3. Oracle Database 8.1.7 for Microsoft
Windows NT/2000
4.Microsoft Windows 2000 with
IIS5.0
5. SQL*PLUS and Notepad
Step to create
a program
1.Create stored
function
เริ่มจากขั้นตอนแรก เราจะสร้าง
Stored Function ที่ฝั่ง Database กันก่อน โดยที่ในตัวอย่างนี้จะสร้างในลักษณะที่เป็น
Package
Function ที่เราสร้างเพื่อการทดสอบในครั้งนี้จะรับข้อมูลมา
จาก parameter แล้วนำมา คูณด้วย 2 จากนั้นก็ return ค่ากลับไป
เริ่มต้นด้วยการเรียกใช้งาน SQL
Plus เพื่อสร้าง Package ดังนี้
|
$ sqlplus scott/tiger@zeal
SQL> CREATE
OR REPLACE PACKAGE SimpleCalc AS
2 Function
Multiply2 (num in number) RETURN NUMBER;
3 END SimpleCalc;
4 /
Package created.
SQL>
SQL> CREATE
OR REPLACE PACKAGE BODY SimpleCalc AS
2 Function
Multiply2 (num in number) RETURN NUMBER IS
3 Begin
4 Return (num
*2 );
5 End Multiply2;
6 END SimpleCalc;
7 /
Package body
created.
SQL>
|
ทดสอบ function ที่เราสร้างกันก่อน
|
SQL> variable
myvar number
SQL> exec
:myvar := SimpleCalc.Multiply2(50);
PL/SQL procedure
successfully completed.
SQL> print
:myvar
MYVAR
---------
100
SQL>
|
จากตัวอย่างด้านบน ก็เป็นการแสดงว่า
Function ที่เราสร้างสามารถทำงานได้อย่างปกติ ถูกต้อง
2. Create ASP
program for call Stored Function and retrieve data from EMP table
create
connection Object
เริ่มจาก สร้าง ADODB.connection Object
Connection String ที่ใช้งานผ่าน ADO
นั้น จะมี Format ในการใช้งานอยู่ 2 รูปแบบด้วยกันคือ
1) DSN=zeal;UID=scott;PWD=tiger;
2) DRIVER={Oracle ODBC Driver};UID=scott;PWD=tiger;DBQ=zeal;
วิธีแรกเป็นแบบ DSN ส่วนวิธีที่เราพูดถึงใน
Article นี้ก็คือ วิธีที่ 2 ซึ่งก็คือการ Connect แบบ DSN-LESS ซึ่งก็จะมีรูปแบบดังนี้
|
DRIVER={Oracle
ODBC Driver};UID=scott;PWD=tiger;DBQ=zeal;
|
DRIVER เป็นการระบุชื่อ Driver ที่เราเลือกใช้
สำหรับการใช้งานกับ Oracle นั้นเราจะกำหนด เป็น ={Oracle ODBC Driver}
UID จะบอกถึง user ที่เราต้องติดต่อกับ
Oracle Database
PWD ระบุ password ของ user ที่เราระบุ
DBQ ระบุ
ชื่อของ Service Name หรือ Database
alias ( ซึ่งต้องตรงกับที่เรา setup ไว้ใน tnsnames.ora )
รายละเอียดเพิ่มเติมของ parameter ต่าง
ๆ สามารถดูได้จาก
|
Oracle8 ODBC help
-> Format of the Connection String (Programming)
|
ดังนั้น Program ของเราในส่วนของ Connection
ก็จะเป็นดังนี้
|
Set cn = CreateObject("ADODB.Connection")
strCnn = "driver={Oracle
ODBC Driver};uid=scott;pwd=tiger;DBQ=zeal"
cn.Open strCnn
|
ซึ่งก็คือ ต้องการ สร้าง connection
เพื่อติดต่อ กับ Oracle Database โดยใช้ user ชื่อ Scott มี password
เป็น tiger โดยผ่าน connection String ชื่อ zeal
Create
command Object
|
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection
= cn
cmd.CommandText
= "SELECT EMPNO, ENAME FROM EMP"
cmd.CommandType
= adCmdText
|
แต่ก่อนอื่นที่จะมีการเรียกใช้ Stored
Function ผมขออนุญาตทวนการดึงข้อมูลในแบบ ธรรมดาโดยผ่าน Select Statement
กันก่อน จากตัวอย่างด้านบน เราจะเตรียม SELECT statement โดยผ่าน
ADODB.command Object และก็บอกว่า command object เป็นในลักษณะ Command
Text (adCmdText ต้องมีการอธิบายไว้ใน file ADOVBS.inc
อยู่ด้วยนะครับ)
Create
RecordSet Object
จากนั้น ก็สร้าง Recordset Object รอไว้เพื่อเป็นที่เก็บข้อมูลที่เกิดจาก
execute คำสั่ง SELECT ที่เราได้ระบุไว้
|
Set rs = CreateObject("ADODB.Recordset")
rs.CursorType
= adUseOdbc
Set rs = cmd.Execute
|
Return
all record data from RecordSet Object
ก็คงเหมือนการเขียนใช้งานอย่างปกติ
เราก็จะนำ Data ในแต่ละ Row ซึ่งมีหลายColumn มาแสดงผลออกทาง Browser
|
For Count = 0 To
rs.Fields.Count - 1
Response.write
rs.Fields.Item(Count).Value
Next
|
How
to call Stored Function :)
Create
Command Text and Command Type
และแล้ว ก็มาถึงหัวข้อที่เราได้เกริ่นนำในตอนแรก
ที่เราจะมีการเรียกใช้งาน Stored Function กัน
|
cmd.CommandText
= "SimpleCalc.Multiply2"
cmd.CommandType
= adCmdStoredProc
|
เราสามารถใช้ Command Object ตัวเดิม(cmd)
ที่ Create ไว้แล้ว มาใช้งานต่อได้ แต่ในขั้นตอนนี้จะเป็นการเรียกใช้Stored
Function แทน ฉะนั้นในส่วน commandType ก็ต้องกำหนดเป็น adCmdStoredProc
เและ CommandText ก็จะต้องเป็น ชื่อ Stored Function ที่เราจะเรียกใช้
ซึ่งก็คือ "SimpleCalc.Multiply2"
Create
Input Parameters
|
Set InputParam
= cmd.CreateParameter("Param1", adSmallInt, adParamInput,
, 1024)
|
เราได้สร้าง Variable ชื่อ InputParam
เพื่อเก็บรายละเอียดของ Parameter ที่เราต้องใช้ในการติดต่อ กับ
Stored Function ซึ่งก็เป็นการบอกว่า กำหนด parameter ชื่อ Param1
มีลักษณะที่เป็น Input Parameter ที่มีชนิดของข้อมูลเป็น Small Integer
โดยเราให้ค่าเป็น 1024
Create
a Return Parameter
|
Set ReturnParam
= cmd.CreateParameter("Prm2", adSmallInt, adParamReturnValue)
|
กำหนด ReturnParam เพื่อบอกรายละเอียดของ
Parameter ที่ทำหน้าที่รับค่าที่ Return มาจาก Stored Function
Append
Parameters in the correct Order and Execute
|
cmd.Parameters.Append
ReturnParam
cmd.Parameters.Append
InputParam
cmd.Execute
|
และแล้วก็ถึงขั้นตอนการกำหนด Parameter
ให้กับ command Object และ Execute ในขั้นตอนนี้ โดยต้องกำหนด Return
Parameter ก่อน Input Parameter เสมอ ถ้าคุณกำหนดลำดับของ Parameter
สลับกัน Oracle Server จะฟ้อง Error เป็น ORA-24334
Print
Data to browser
ในขั้นตอนนี้ก็เป็นการนำผลที่ได้ มาแสดงผลครับ
|
Response.write
"Input Value = " & cmd.Parameters(1)
Response.write
"Return Value = " & cmd.Parameters(0)
|
Close
and unset all variable
และก่อนจะจบ Program ก็อย่าลืม Clear
ตัวแปรและ Connection ต่าง ๆ ด้วยนะครับ
|
cn.Close
Set rs = Nothing
Set cmd = Nothing
Set cn = Nothing
|
Sample
Output
ถ้าเราลอง Run Program ที่เขียนสมบูรณ์
แล้ว ก็จะได้ ตัวอย่าง Output ดังนี้
|
Retrived Emp table
from Database.
- 7839 | KING
|
- 7698 | BLAKE
|
- ...
- 7934 | MILLER
|
Get Return Value
from stored Function .
Input Value = 1004
Return Value = 2008
|
Complete
Sample code:
ตัวอย่าง Code ที่สมบูรณ์ ที่นี่ ครับ
References:
Oracle8 ODBC help -> Format of
the Connection String (Programming)
Keywords:
ADO,DSN-LESS, Stored Functions
|