- PR -

VB.net2003でOracleストアドを実行

1
投稿者投稿内容
ゴーゴー
会議室デビュー日: 2006/07/24
投稿数: 3
投稿日時: 2006-07-24 11:13
現在VB.net2003にてOracleストアドを実行させようとしています。
Oracleエクスプローラーで実行させたところ正常に実行されました。

ところがVBで実行させようとしたところexceptionが発生してうまく実行できません。
Oracle+.NETプログラミングバイブル等を参考にしてやってみたのですが
どうもパラメーターがうまくわたっていないように見えます。
どうかご教授をお願いします。

ストアドのパラメータ
C_ID,T_ID

VBのコード
Dim conn As New OracleConnection("User Id=hoge;Data Source=ORADB;Password=hoge;data source=hoge;")
Dim cmd As New OracleCommand("UPD_COMMENT_LIST", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.BindByName = True
Dim para1 As OracleParameter = cmd.Parameters.Add("C_ID", OracleDbType.Decimal, ParameterDirection.Input)
Dim para2 As OracleParameter = cmd.Parameters.Add("T_ID", OracleDbType.Varchar2, ParameterDirection.Input)
para1.Value = me.inputid.text
para2.Value = me.inputid2.text
Console.WriteLine(para1.Value)
Me.ExecStore.Connection.Open()
Me.ExecStore.ExecuteNonQuery()
Me.ExecStore.Connection.Close()
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-24 11:31
引用:

ゴーゴーさんの書き込み (2006-07-24 11:13) より:

ところがVBで実行させようとしたところexceptionが発生してうまく実行できません。
Oracle+.NETプログラミングバイブル等を参考にしてやってみたのですが
どうもパラメーターがうまくわたっていないように見えます。


exception の内容を詳しく教えてください。
また、他の検索処理などは正常に動作していますか?


引用:

コード:
        Me.ExecStore.Connection.Open()
        Me.ExecStore.ExecuteNonQuery()
        Me.ExecStore.Connection.Close()




ExecStore って何ですか?
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-07-24 11:32
引用:

ゴーゴーさんの書き込み (2006-07-24 11:13) より:
ところがVBで実行させようとしたところexceptionが発生してうまく実行できません。
Oracle+.NETプログラミングバイブル等を参考にしてやってみたのですが
どうもパラメーターがうまくわたっていないように見えます。


なんという例外が、何処で発生したのかぐらいは書こうよ。
ストアドプロシージャの関数定義ぐらいは書こうよ。
ゴーゴー
会議室デビュー日: 2006/07/24
投稿数: 3
投稿日時: 2006-07-24 11:43
早速の回答ありがとうございます。

Me.ExecStore.Connection.Open()
Me.ExecStore.ExecuteNonQuery()
Me.ExecStore.Connection.Close()
は古いコードが残っていました。
正しくは
cmd.Connection.Open()
cmd.ExecuteNonQuery()
cmd.Connection.Close()
です。

'Oracle.DataAccess.Client.OracleException' のハンドルされていない例外が oracle.dataaccess.dll で発生しました。

追加情報 : システム エラーです。

という内容が
cmd.ExecuteNonQuery()
で発生しています。

定義したストアドの内容は
(c_id in customer_mst.cust_id%type,
tc_id out customer_mst.cust_id%type,
t_id in customer_mst.TOSS_CUSTOMER_ID%type,
tmp_no out int,
tmp_no2 out int,
line_no out int)

IS
BEGIN
select count(cust_id) into tmp_no from CUSTOMER_COMMENT_LIST where cust_id = c_id;
select cust_id into tc_id from customer_mst where TOSS_CUSTOMER_ID = t_id;
select count(cust_id) into tmp_no2 from CUSTOMER_COMMENT_LIST where cust_id = tc_id;
tmp_no := tmp_no + 1;
tmp_no2 := tmp_no2 + tmp_no;
line_no := 1;

for i in tmp_no .. tmp_no2 loop
update CUSTOMER_COMMENT_LIST set COMMENT_NO = tmp_no where cust_id = tc_id and COMMENT_NO = line_no;
tmp_no := tmp_no + 1;
line_no := line_no + 1;
end loop;
update CUSTOMER_COMMENT_LIST set cust_id = tc_id where cust_id = c_id;
update CUSTOMER_MST set del_yn = '1' where cust_id = c_id;
commit;

END;

です。

よろしくお願いします。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-07-24 12:38
引用:

ゴーゴーさんの書き込み (2006-07-24 11:43) より:

'Oracle.DataAccess.Client.OracleException' のハンドルされていない例外が oracle.dataaccess.dll で発生しました。

追加情報 : システム エラーです。


これだけだと、何が悪いの解りませんね、他のSQLでも同様のエラーが出ますか?
例えばこんなの

コード:
        Dim conn As New System.Data.OracleClient.OracleConnection("User Id=hoge;Data Source=ORADB;Password=hoge;data source=hoge;")
        Try
            conn.Open()

            Dim command As New System.Data.OracleClient.OracleCommand("select sysdate from dual", conn)
            Try
                MessageBox.Show(DirectCast(command.ExecuteOracleScalar, System.Data.OracleClient.OracleDateTime).ToString)
            Finally
                If Not command Is Nothing Then
                    command.Dispose()
                End If
            End Try

            conn.Close()
        Finally
            If Not conn Is Nothing Then
                conn.Dispose()
            End If
        End Try

oracle
常連さん
会議室デビュー日: 2003/12/04
投稿数: 29
お住まい・勤務地: さいたま
投稿日時: 2006-07-24 13:05
気になる点が二つ

@プロシージャのパラメータが六つあるのに呼び側は二つだけ?
out parameter 用の宣言は?
数が足りないんじゃ???

Aプロシージャのout parameterに対して参照をしているが、
たしかエラーになるはず、、、、ローカル変数にいったん格納して
最後にoutにセットしてみたら、、、
ゴーゴー
会議室デビュー日: 2006/07/24
投稿数: 3
投稿日時: 2006-07-24 13:33
引用:

oracleさんの書き込み (2006-07-24 13:05) より:
気になる点が二つ

@プロシージャのパラメータが六つあるのに呼び側は二つだけ?
out parameter 用の宣言は?
数が足りないんじゃ???

Aプロシージャのout parameterに対して参照をしているが、
たしかエラーになるはず、、、、ローカル変数にいったん格納して
最後にoutにセットしてみたら、、、




かるあさんのご指摘のように動かしたところ他のSQLでは動作したので
Oracleさんのご指摘をうけてプロシージャーのパラメータをきちんと修正したら
動作しました。
本当にありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)