- - PR -
VB.NETからPL/SQLをキックをするときにDate型引数を渡すには?
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-11-07 18:47
下記のような方法でOracleへの接続、PL/SQLの起動を行っています。
引数を"2006/01/01"として、投げているのですが、エラーが発生してしまいます。 datetime関数なども試してみましたが、エラーは出てしまいました。 PL/SQL側をNumberやCharとして受け取ると、問題なくPL/SQLが起動するので、 構文は問題ないものと思っています。どなたか、Date型への値の引渡し方法を 知っている方がいらっしゃいましたら、ご教授お願い申し上げます。 Dim OraCnn As New OracleConnection '-- Dim sb As New System.Text.StringBuilder sb.Append("User Id=xxxx; Password=xxxx;") sb.Append("Data Source=(DESCRIPTION = (ADDRESS_LIST = ") sb.Append("(ADDRESS = (PROTOCOL = TCP)(HOST = XXX)") sb.Append("(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)") sb.Append("(SERVICE_NAME = XXX)));") OraCnn.ConnectionString = sb.ToString '--接続のオープン OraCnn.Open() '--PL/SQL呼び出し Dim OraCmd As New OracleCommand OraCmd.Connection = OraCnn OraCmd.CommandText = "xxxxxx" OraCmd.CommandType = CommandType.StoredProcedure '--引数 Dim param As OracleParameter = OraCmd.Parameters.Add("PARA_DATE",OracleDbType.date) param.Direction = ParameterDirection.Input param.Value = "2006/01/01" '--戻り値 Dim Rtn As OracleParameter = OraCmd.Parameters.Add("Rtn",OracleDbType.Int32) Rtn.Direction = ParameterDirection.ReturnValue 'ストアド実行 OraCmd.ExecuteNonQuery() '接続のクローズ OraCnn.Close() 環境: 端末 WindowsXPSP2+VB2003+ODP.NET+Oracle10gClientRelease2 Server Windows2003+Oracle10gRelease2 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-11-07 19:29 ] | ||||||||
|
投稿日時: 2006-11-07 19:53
NAL-6295です。
どんなエラーが発生するのでしょうか? それが分かるともう少し適切な回答をすることができると思いますが、 たぶん
このvalueにString型の値を渡していますが、DateTime型で渡すと解決するのではないかと推測します。
こんな感じで。 | ||||||||
|
投稿日時: 2006-11-07 19:54
datetime 関数ってのは .NET の DateTime構造体 のこととして、 DateTime.Now とかを代入しても例外が発生したということですか? このときも同じ例外が出ましたか? また、 Oracle の Package 定義がどうなっているのかわからないのですが、 仮引数は Date または TimeStamp 型になっていますか?
あれ?? BindByName を True にしないときは 戻り値って先に積んであげなければいけなかったような。。。 | ||||||||
|
投稿日時: 2006-11-07 20:46
NAL-6295さま、かるあさま、早速の返信ありがとうざいます。
環境が職場ですので、エラーメッセージなどはしっかりチェックしてきます。 まずはお二方に提示していただいた方法で試してみたいと思います。
とのことですが、BindByNameという言葉を始めて聞きました。 レベルが低くてお恥ずかしいですが、ちょっと調べてみたいと思います。 あとPL/SQL側は、 create or replace function xxxx( PARA_DATE IN DATE ) Return Number is となっていたはずです。 それでは、結果が分かりましたらご報告させていただきます。 | ||||||||
|
投稿日時: 2006-11-07 22:24
解決の報告です。
待ちきれなく、自宅でほぼ同じ環境を作成し、 実行してみました。 エラー内容は下記メッセージです。 ------------------------------------------------------------------ ORA-06550: 行1、列15: PLS-00306:'xxx'の呼び出しで、引数の数または型が正しくありません。 ORA-06550: 行1、列7: PL/SQL: Statement ignored ------------------------------------------------------------------ これを踏まえまして、param.Value = New DateTime(2006,1,1) と記述したところ、見事引数を渡すことが出来ました。 NAL-6295さまありがとうございました。 また、BindByName=True指定をしてあげたところ、 param.Value = "2006/01/01"でも、PL/SQLが無事動くことが出来ました。 かるあさまありがとうございました。 お二方のご協力で無事PL/SQLのキックが出来るようになりました。 的確なアドバイスありがとうございました。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-11-07 22:25 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2006-11-07 22:27 ] |
1