VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
その4では、REF CURSORをOUT引数として持つストアドプロシージャをC#でDataReaderに受け取る方法を紹介しました。
今回は、REF CURSOR(OUT引数)をC#で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パラメータをC#のDataSetに受け取る方法について説明します。
ストアドプロシージャのREF CURSOR(OUT引数)ですが、OleDBでは指定することができません。(指定はできませんが、OUT引数の結果はDataSetにセットされます)
あとはDataAdapterとDataSetを作成し、DataAdapterのFillメソッドを使用することで、DataSetにREF CURSORの結果を取得することができます。
private void OleDB_TEST5() { try { using (OleDbConnection OraConn = new OleDbConnection("Provider=MSDAORA.1.Oracle;user id=scott;" + "password=tiger;data source=aicnet01")) { using (OleDbCommand Cmd = new OleDbCommand()) { //データベース接続を開く OraConn.Open(); Cmd.Connection = OraConn; //コマンドタイプをストアドプロシージャにする Cmd.CommandType = CommandType.StoredProcedure; //実行するストアドプロシージャを指定 Cmd.CommandText = "PKG_TEST2.PROCEDURE5"; //OleDbではストアドプロシージャのout cursor用パラメータ作成は必要ない OleDbDataAdapter OraDA = new OleDbDataAdapter(Cmd); DataSet ds = new DataSet(); OraDA.Fill(ds, "EMP"); dataGridView1.DataSource = ds.Tables["EMP"]; MessageBox.Show("PROCEDURE5 正常終了", "SUCCESS", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } catch (OleDbException OraEx) { // Oracle例外発生時 MessageBox.Show(OraEx.Message, "ORACLE ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (Exception ex) { // 一般例外発生時 MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }