- - PR -
VB.net2003でOracleストアドを実行
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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() | ||||||||||||
|
投稿日時: 2006-07-24 11:31
exception の内容を詳しく教えてください。 また、他の検索処理などは正常に動作していますか?
ExecStore って何ですか? | ||||||||||||
|
投稿日時: 2006-07-24 11:32
なんという例外が、何処で発生したのかぐらいは書こうよ。 ストアドプロシージャの関数定義ぐらいは書こうよ。 | ||||||||||||
|
投稿日時: 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; です。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-07-24 12:38
これだけだと、何が悪いの解りませんね、他のSQLでも同様のエラーが出ますか? 例えばこんなの
| ||||||||||||
|
投稿日時: 2006-07-24 13:05
気になる点が二つ
@プロシージャのパラメータが六つあるのに呼び側は二つだけ? out parameter 用の宣言は? 数が足りないんじゃ??? Aプロシージャのout parameterに対して参照をしているが、 たしかエラーになるはず、、、、ローカル変数にいったん格納して 最後にoutにセットしてみたら、、、 | ||||||||||||
|
投稿日時: 2006-07-24 13:33
かるあさんのご指摘のように動かしたところ他のSQLでは動作したので Oracleさんのご指摘をうけてプロシージャーのパラメータをきちんと修正したら 動作しました。 本当にありがとうございました。 |
1