VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。
基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。
その1では引数なしのストアドプロシージャをC#から呼び出す方法を紹介しました。
今回は引数があるストアドプロシージャをC#から呼び出す方法を紹介します。
使用するテーブルは、Oracleを使用している人であればおなじみの、scott/tigerのEMP表です。
ストアドプロシージャは下記の通りです。もらった引数をINSERT文で書き込んでいるだけのものです。
(例によって深い意味はありません。説明用です。)
■ストアドプロシージャ2
CREATE OR REPLACE PROCEDURE SCOTT.PROCEDURE2(in_EMPNO in varchar2, in_ENAME in varchar2, in_SAL in number)
IS
BEGIN
INSERT INTO EMP (EMPNO, ENAME, SAL) VALUES (in_EMPNO, in_ENAME, in_SAL);
END;
/
上のPROCEDURE2は引数を3つ持っていますが、C#からこれらに値を渡すにはコマンドパラメータを追加する必要があります。
パラメータの追加は、Cmd.Parameters.Addメソッドの第1引数に、ストアドプロシージャの引数名を、第2引数にはストアドプロシージャの引数の型を指定します。OracleのVarchar2にはOleDbType.VarChar、NumberにはOleDbType.Decimalを指定しています。
using System.Data.OleDb; private void OleDB_TEST2() { 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 = "PROCEDURE2"; //ストアドプロシージャの引数に渡す値の設定 Cmd.Parameters.Add("in_EMPNO", OleDbType.VarChar).Value = "7777"; Cmd.Parameters.Add("in_ENAME", OleDbType.VarChar).Value = "HIRO"; Cmd.Parameters.Add("in_SAL", OleDbType.Decimal).Value = 500; //ストアドプロシージャの実行 Cmd.ExecuteNonQuery(); MessageBox.Show( "PROCEDURE2 正常終了", "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); } }