|
分類:[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;
見づらいかとは思いますが、よろしくお願いいたします。
|