|
Public myCon As New OracleConnection()
Public myCommand As New OracleCommand()
Dim Query As String = Nothing
' ******************************************************
' サーバー側のカーソルを取得して使用する
' ******************************************************
Private Sub 引数テストCURToolStripMenuItem_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles 引数テストCURToolStripMenuItem.Click
myCon.ConnectionString = _
"Server=night/xe;" + _
"User ID=ora01;" + _
"Password=ora01;"
' *******************************************
' 接続
' *******************************************
Try
myCon.Open()
myCommand.Connection = myCon
Catch ex As Exception
MessageBox.Show(ex.Message)
Return
End Try
' *******************************************
' DBMS_OUTPUT の結果を取得する為に使用可能にする
' *******************************************
Query = "BEGIN DBMS_OUTPUT.ENABLE(); END;"
' コマンドをSQL用に変更
myCommand.CommandType = CommandType.Text
myCommand.CommandText = Query
Try
myCommand.ExecuteNonQuery()
Catch ex As Exception
myCon.Close()
MessageBox.Show(ex.Message)
Return
End Try
' *******************************************
' プロシージャの実行
' *******************************************
' 実行タイプ
myCommand.CommandType = CommandType.StoredProcedure
' プロシージャ名
myCommand.CommandText = "引数テスト_CUR"
' パラメータクリア
myCommand.Parameters.Clear()
' 1つ目のパラメータ( IN なので簡単な記述方法 )
myCommand.Parameters.Add("PM_01", OracleType.VarChar).Value = "0010"
' 2つ目のパラメータ( OUT なので、パラメータオブジェクトを作成 )
Dim SERVER_CUR As New OracleParameter("PM_02", OracleType.Cursor)
SERVER_CUR.Direction = ParameterDirection.Output
' 2つ目のパラメータを追加
myCommand.Parameters.Add(SERVER_CUR)
' カーソルを受け取る Reader
Dim RecordSet As OracleDataReader = Nothing
Try
' 結果を受け取り、後で処理する
RecordSet = myCommand.ExecuteReader()
Catch ex As Exception
myCon.Close()
MessageBox.Show(ex.Message)
Return
End Try
' *******************************************
' DBMS_OUTPUT の結果を取得する
' *******************************************
myCommand.CommandType = CommandType.StoredProcedure
myCommand.CommandText = "DBMS_OUTPUT.GET_LINE"
myCommand.Parameters.Clear()
Dim PARAM As OracleParameter = _
New OracleParameter("line", OracleType.VarChar)
PARAM.Direction = ParameterDirection.Output
PARAM.Size = 200
myCommand.Parameters.Add(PARAM)
Dim STATUS As OracleParameter = _
New OracleParameter("status", OracleType.Number)
STATUS.Direction = ParameterDirection.Output
myCommand.Parameters.Add(STATUS)
Try
myCommand.ExecuteNonQuery()
Catch ex As Exception
myCon.Close()
MessageBox.Show(ex.Message)
Return
End Try
' グリッドの列を作成
Me.LboxGrid1.Reset()
Me.LboxGrid1.AddColumn("LINE", "DBMS_OUTPUT.GET_LINEからのデバッグデータ")
Do While STATUS.Value = 0
Me.LboxGrid1.AddRow()
Me.LboxGrid1.SetColumnText("LINE", PARAM.Value.ToString())
Try
myCommand.ExecuteNonQuery()
Catch ex As Exception
Exit Do
End Try
Loop
' *******************************************
' サーバーからのカーソルのデータを読み出す
' *******************************************
Dim line As String = ""
Dim idx As Integer = 0
Do While RecordSet.Read()
Me.LboxGrid1.AddRow()
idx = RecordSet.GetOrdinal("社員コード")
line += RecordSet.GetValue(idx).ToString()
idx = RecordSet.GetOrdinal("氏名")
line += " | " + RecordSet.GetValue(idx).ToString()
Me.LboxGrid1.SetColumnText("LINE", line)
line = ""
Loop
' *******************************************
' 終了処理
' *******************************************
RecordSet.Close()
myCommand.Parameters.Clear()
myCon.Close()
End Sub
| |