Oracle .ManagedDataAccess Процедуры с датой в качестве параметра, вызывающего исключение - PullRequest
0 голосов
/ 14 февраля 2020
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

Я также попробовал тот же код, но заменил Varchar2 на Date, и оба раза я получаю одно и то же исключение

Один из идентифицированных элементов был в недопустимом формате.

1 Ответ

2 голосов
/ 14 февраля 2020

Не передавайте строку в качестве значения параметра, просто используйте значение Дата , т.е.

oracleParameter(1) = cmd.Parameters.Add("Date_Start_P", dbType:=OracleDbType.Date, val:=CDate(Me.dt_Start_Date.Text.Trim), ParameterDirection.Input)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...