以日期为参数的Oracle.ManagedDataAccess过程导致异常

问题描述 投票:0回答:1
create or replace PROCEDURE     PROCEDURE_ONE(
 T1_CURSOR OUT SYS_REFCURSOR,
 Date_Start_P in Date Default sysdate
)
as
begin
OPEN T1_CURSOR FOR ...

这在使用Oracle SQL Developer进行测试时有效

我的VB.Net代码不喜欢该参数

Private Function Load_Aging_Stock() As DataTable
    Try
        Dim dba As New Data_Access_Class
        Dim strSQL As String = "JOHN.PROCEDURE_ONE"
        Dim dt As DataTable

        Dim cmd As OracleCommand = dba.CreateStoredProcCommand(strSQL)
        Dim oracleParameter(1) As OracleParameter
        oracleParameter(0) = New OracleParameter()
        oracleParameter(1) = New OracleParameter()

        cmd.BindByName = True
        With cmd
            oracleParameter(0) = cmd.Parameters.Add("T1_Cursor", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.RefCursor, ParameterDirection.Output)
            '.Parameters.Add("T1_CURSOR", OracleClient.OracleType.Cursor).Direction = ParameterDirection.Output

            If Me.chk_No_Date_Start.Checked = False Then
                Dim tmpDate As String = CDate(Me.dt_Start_Date.Text.Trim).ToString("yyyy-MM-dd")
                oracleParameter(1) = cmd.Parameters.Add("Date_Start_P", dbType:=Oracle.ManagedDataAccess.Client.OracleDbType.Varchar2, val:=tmpDate, ParameterDirection.Input)
                '.Parameters.Add("Date_Start_P", OracleClient.OracleType.DateTime).Value = Me.dt_Start_Date.Text
            End If
        End With

        dt = dba.ExecuteSelectCmdDataTbl(cmd)

        Return dt

    Catch ex As Exception
        Dim Err As New SS_Errors("frm__Report", "Load_Report", ex)
        Return Nothing
    End Try

End Function

我也尝试过相同的代码,但是用Date和两次替换Varchar2,两次都得到相同的异常

已识别的项目之一格式无效。

vb.net oracle stored-procedures
1个回答
0
投票
不要通过

字符串作为参数值,只需使用日期值,即

oracleParameter(1) = cmd.Parameters.Add("Date_Start_P", dbType:=OracleDbType.Date, val:=CDate(Me.dt_Start_Date.Text.Trim), ParameterDirection.Input)
© www.soinside.com 2019 - 2024. All rights reserved.