今回から何回かに分けて、VB.NETからOracleのストアドプロシージャを呼び出す方法を紹介していきたいと思います。(ここ違うんじゃないの?という箇所ありましたらつっこみお願いします。)
開発言語:VB.NET 2005
Oracle Server: 8.1.6以降推奨(というか実験環境がこれでした)
使用するテーブルは、Oracleを使用している人であればおなじみの、scott/tigerのEMP表です。
EMP表
CREATE TABLE SCOTT.EMP
(
EMPNO NUMBER(4,0) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4,0),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2,0),
CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES SCOTT.DEPT (DEPTNO),
CONSTRAINT PK_EMP PRIMARY KEY (EMPNO)
)
/
今回は、引数なしのストアドプロシージャをVB.NETから呼び出してみたいと思います。
下記に引数なしのストアドプロシージャ(PROCEDURE1)を示します。
(中身については特に気にしないでください。説明上、引数なしのプロシージャを準備したかっただけです。)
■ストアドプロシージャ1
CREATE OR REPLACE PROCEDURE SCOTT.PROCEDURE1
IS
BEGIN
INSERT INTO EMP (EMPNO, ENAME) VALUES ('7777','HIRO');
END;
/
以下、ODP.NET, MicorosoftのOracleClient, OleDB の3種類を使用してPROCEDURE1を呼び出す例です。
使用するクラスが違うだけで、使用方法はほぼ一緒です。接続文字列が異なるくらいです。
■ODP.NETサンプル
Imports Oracle.DataAccess.Client
Private Sub ODP_TEST1()
Try
Using OraConn As New OracleConnection("user id=scott;password=tiger;data source=YourServer")
Using Cmd As New OracleCommand
OraConn.Open()
Cmd.Connection = OraConn
Cmd.CommandType = CommandType.StoredProcedure
Cmd.CommandText = "PROCEDURE1"
Cmd.ExecuteNonQuery()
MessageBox.Show("PROCEDURE1 正常終了", "SUCCESS", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Using
End Using
Catch OraEx As OracleException
MessageBox.Show(OraEx.Message, "ORACLE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Catch ex As Exception
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
End Try
End Sub
■OracleClientサンプル
Imports System.Data.OracleClient
Private Sub OracleClient_TEST1()
Try
Using OraConn As New OracleConnection("user id=scott;password=tiger;data source=YourServer")
Using Cmd As New OracleCommand
OraConn.Open()
Cmd.Connection = OraConn
Cmd.CommandType = CommandType.StoredProcedure
Cmd.CommandText = "PROCEDURE1"
Cmd.ExecuteNonQuery()
MessageBox.Show("PROCEDURE1 正常終了", "SUCCESS", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Using
End Using
Catch OraEx As OracleException
MessageBox.Show(OraEx.Message, "ORACLE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Catch ex As Exception
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
End Try
End Sub
■OleDBサンプル
Imports System.Data.OleDb
Private Sub OleDB_TEST1()
Try
Using OraConn As New OleDbConnection("Provider=MSDAORA.1.Oracle;user id=scott;password=tiger;data source=YourServer")
Using Cmd As New OleDbCommand
OraConn.Open()
Cmd.Connection = OraConn
Cmd.CommandType = CommandType.StoredProcedure
Cmd.CommandText = "PROCEDURE1"
Cmd.ExecuteNonQuery()
MessageBox.Show("PROCEDURE1 正常終了", "SUCCESS", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Using
End Using
Catch OleEx As OleDbException
MessageBox.Show(OleEx.Message, "OleDB ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
Catch ex As Exception
MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop)
End Try
End Sub