HIRO's.NET

VB.NET, C#, PowerShell Tipsサイト

 VB.NET, C#, PowerShellを使用しているエンジニアのためのサイト。

 基本的な使用方法から開発で役立つTipsまで幅広く取り扱っています。

HIRO's.NET RSSHIRO's.NET RSS


VB.NET 2005の開発でお困りのことはありませんか?
そんな悩みは当サイトで解決!!

HOME > VB.NET 2005 Tips > その他 Tips メニュー> ストアド操作 OleDB編 Tips メニュー

02.ストアドプロシージャ操作 その2

UPDATE:2007/04/20 

<< 前のTips  次のTips >>

 


その1では引数なしのストアドプロシージャをVB.NETから呼び出す方法を紹介しました。
今回は引数があるストアドプロシージャをVB.NETから呼び出す方法を紹介します。

使用するテーブルは、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つ持っていますが、VB.NETからこれらに値を渡すにはコマンドパラメータを追加する必要があります。
 パラメータの追加は、Cmd.Parameters.Addメソッドの第1引数に、ストアドプロシージャの引数名を、第2引数にはストアドプロシージャの引数の型を指定します。OracleのVarchar2にはOleDbType.VarChar、NumberにはOleDbType.Decimalを指定しています。

 
サンプル
Imports System.Data.OleDb

Private Sub OleDB_TEST2()
    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 = "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)
            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