VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
その4では、REF CURSORをOUT引数として持つストアドプロシージャをVB.NETでDataReaderに受け取る方法を紹介しました。
今回は、REF CURSOR(OUT引数)をVB.NETでDataSetに受け取る方法を紹介します。
使用するテーブルは、Oracleを使用している人であればおなじみの、scott/tigerのEMP表です。
ストアドプロシージャは下記の通りです。もらった引数をINSERT文で書き込み、書き込み後のEMP表総件数をout_TOTALCNTにセットします。
(例によって深い意味はありません。説明用です。)
■ストアドプロシージャ5
CREATE OR REPLACE PACKAGE SCOTT.PKG_TEST2
IS
TYPE ref_cursor IS REF CURSOR;
Procedure PROCEDURE5(out_cursor OUT ref_cursor);
END;
/
CREATE OR REPLACE PACKAGE BODY SCOTT.PKG_TEST2 AS
Procedure PROCEDURE5 (
out_cursor OUT ref_cursor
)
IS
BEGIN
BEGIN
OPEN out_cursor FOR
SELECT * FROM EMP;
END;
END PROCEDURE5;
END PKG_TEST2;
/
今回は、ストアドプロシージャのOUTパラメータをVB.NETのDataSetに受け取る方法について説明します。
ストアドプロシージャのREF CURSOR(OUT引数)ですが、OleDBでは指定することができません。(指定はできませんが、OUT引数の結果はDataSetにセットされます)
あとはDataAdapterとDataSetを作成し、DataAdapterのFillメソッドを使用することで、DataSetにREF CURSORの結果を取得することができます。
Private Sub OleDB_TEST5() Try Using OraConn As New OleDbConnection("Provider=MSDAORA.1.Oracle;user id=scott;" & _ "password=tiger;data source=aicnet01;PLSQLRset=True") Using Cmd As New OleDbCommand 'データベース接続を開く OraConn.Open() Cmd.Connection = OraConn 'コマンドタイプをストアドプロシージャにする Cmd.CommandType = CommandType.StoredProcedure ''実行するストアドプロシージャを指定 Cmd.CommandText = "PKG_TEST2.PROCEDURE5" 'OleDbではストアドプロシージャのout cursor用パラメータ作成は必要ない Dim OleDA As New OleDbDataAdapter(Cmd) Dim ds As New DataSet() OleDA.Fill(ds, "EMP") DataGridView1.DataSource = ds.Tables("EMP") MessageBox.Show("PROCEDURE5 正常終了", "SUCCESS", _ MessageBoxButtons.OK, MessageBoxIcon.Information) End Using End Using Catch OleEx As OleDbException 'Oracle例外発生時 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