Exzilla.net
Contact
Home -> Articles -> ADO and SP -> Using ADO and a DSN-LESS connection with Oracle Database for ASP Developer
 
Features
Forums
Files
Blogs
Using ADO and a DSN-LESS connection with Oracle Database for ASP Developer
May 31, 2001
Spidix
Author's Bio | E-Mail
Copyright (C) 2001 exzilla.net

 

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

 

 
{exzilla.net -- e-development QuickStart --}



Copyright (c) 2001-2009 - Exzilla.net -  All Rights Reserved.
Contact Us | Privacy Policy | Terms & Conditions