| 分類:[VB.NET/VB2005]
いつもお世話になっております。 環境: Windows2000Pro VB.NET2002 Oracle 10g にて、既存のシステムの修正開発を行っております。
以下のソースにしたところ、例外が発生して悩んでおります。
'System.Data.OleDb.OleDbException' のハンドルされていない例外がsystem.data.dllで発生しました
とダイアログが表示されます。 Msgboxを表示させ、例外のメッセージを表示させたところ 'ORA-01036: illegal variable name/number' とありました。
追加したパラメータをコメントアウトすれば、処理は通るため、 パラメータ指定に問題があるのかと考えていました。 実際に見直したところ、変数の間違いはないように思えます。
なにかヒントをご提示いただけたら幸いです。
以下該当する処理です。
処理部 Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click Me.Cursor = Cursors.WaitCursor Dim params As New ArrayList() Dim souhin_kb As String Dim branch As String
souhin_kb と branch の取得処理 この値は狙ったとおりの値を取得しています。
params.Add(New OleDbParameter("PSOUHIN_KB", souhin_kb)) params.Add(New OleDbParameter("PBRANCHCODE", branch)) <=このパラメータを新たに追加したところエラー params.Add(New OleDbParameter("PFROMDATE", fromDate.Value)) params.Add(New OleDbParameter("PTODATE", toDate.Value)) Dim ds As DataSet = DBOraUtil.getDataSet("P_JYUCYU_ME.findUnensure", "curunensure", params, "unfinished") Dim rpt As New unfinishedReport() rpt.SetDataSource(ds) viewer.ReportSource = rpt Me.Cursor = Cursors.Default End Sub
Public Shared Function getDataSet(ByVal procName As String, ByVal cursorName As String, ByVal parameters As ArrayList, ByVal name As String) As DataSet Dim cmd As OleDbCommand = makeCommand(procName, cursorName, parameters) Dim ds As New DataSet() Dim da As New OleDbDataAdapter() da.SelectCommand = cmd Try da.Fill(ds, name) <=ここでエラー Catch ex As Exception MsgBox("error:" & ex.Message) End Try cmd.Parameters.Clear() Return ds End Function
Private Shared Function makeCommand(ByVal procName As String, ByVal cursorName As String, ByVal parameters As ArrayList, Optional ByVal index As Integer = 0) As OleDbCommand Dim cmd As New OleDbCommand() With cmd Dim sb As New StringBuilder() sb.Append("{call " & procName & "({resultset 0, " & cursorName & "}") If Not (parameters Is Nothing) Then Dim i As Integer Dim l As Integer = parameters.Count - 1 For i = 0 To l sb.Append(",?") .Parameters.Add(parameters.Item(i)) Next End If sb.Append(")}") .CommandText = sb.ToString .Connection = DBOraUtil.getConnection(index) End With Return cmd End Function
OracleのSQL文 プロシジャーの宣言部 procedure findUnensure(curunensure in out curunensure, psouhin_kb in varchar2, pbranchCode in varchar2, pfromDate in date, ptoDate in date);
実行SQL部 procedure findUnensure(curunensure in out curunensure, psouhin_kb in varchar2, pbranchCode in varchar2, pfromDate in date, ptoDate in date) as begin open curunensure for SELECT mi.branchCode, mi.userid, mi.name, to_char(mi.hiduke, 'YYYY/MM/DD') hiduke, to_char(mi.jikan, 'HH24:MI:SS') jikan, me.jyucyu_no_lin, me.isbn, me.title, me.pub, me.jyucyu_suu, me.jyucyu_del_suu, me.b_nouhin_suu, me.jyucyu_zan, me.hikiate_suu, b.branchName FROM jyucyu_me me LEFT JOIN jyucyu_mi mi ON mi.jyucyu_no = me.jyucyu_no LEFT JOIN webUser u ON u.userID = mi.userID LEFT JOIN branch b ON b.branchCode = mi.branchCode WHERE mi.souhin_kb LIKE psouhin_kb AND mi.branchCode LIKE pbranchCode <=追加した部分 AND me.k_haccyu_suu < (me.jyucyu_zan - me.hikiate_suu) AND to_date(to_char(mi.hiduke, 'YYYY/MM/DD') || ' ' || to_char(mi.jikan, 'HH24:mi:ss'), 'YYYY/MM/DD hh24:mi:ss') between pfromDate and ptoDate AND me.vendor = 'j' ORDER BY mi.branchCode, me.jyucyu_no_lin; EXCEPTION WHEN OTHERS THEN p_errorLog.entry('p_jyucyu_me.findUnensure', sqlErrm); raise; end;
見づらいかとは思いますが、よろしくお願いいたします。 |