Приложение ODP. Net падает, когда я добавляю параметр в хранимую процедуру. Это не было сбой раньше, когда мы использовали классы Microsoft / Oracle - PullRequest
0 голосов
/ 29 января 2020
Public Function Does_User_Exist(ByVal strEmpId As String) As Boolean
    Try

        Dim strSQL As String = "DATA.DOES_USER_EXIST"
        Dim cmd As OracleCommand = dba.CreateStoredProcCommand(strSQL)
        cmd.Connection.Open()

        If cmd.Connection.State = ConnectionState.Open Then

            With cmd
                ' CRASHING ON NEXT LINE. I CHANGED THE ORDER AND MADE IT ALL CAPS.
                .Parameters.Add(name:="EMPLOYEE", dbType:=OracleClient.OracleType.VarChar, size:=8).Value = strEmpId 
                .Parameters.Add(name:="ROWCOUNT", dbType:=OracleClient.OracleType.Number).Direction = ParameterDirection.Output
            End With

            dba.ExecuteScaler(cmd)

            If cmd.Parameters("RowCount").Value.ToString = 1 Then
                Return True
            Else
                Return False
            End If
        End If


    Catch ex As Exception
        Dim DATAErr As New DATA_Errors("DATA_Users", "Does_User_Exist", ex)
        Return False
    Finally

    End Try
End Function

Я проверил состояние соединения и оно открыто

Message = "Ссылка на объект не установлена ​​на экземпляр объекта." "Oracle .DataAccess"

Я не уверен, что еще делать. Я перехожу на ODP. NET из устаревшего класса Microsoft / Oracle.

Я думаю, что проблема связана с параметрами. Не уверен, как решить эту проблему * Что находится вне диапазона? Как проверить значение?

1 Ответ

0 голосов
/ 31 января 2020

Старый код

        With cmd
            ' CRASHING ON NEXT LINE. I CHANGED THE ORDER AND MADE IT ALL CAPS.
            .Parameters.Add(name:="EMPLOYEE", dbType:=OracleClient.OracleType.VarChar, size:=8).Value = strEmpId 
            .Parameters.Add(name:="ROWCOUNT", dbType:=OracleClient.OracleType.Number).Direction = ParameterDirection.Output
        End With

Новый код

Dim oracleParameter(1) As OracleParameter
oracleParameter(0) = New OracleParameter()
oracleParameter(1) = New OracleParameter()


oracleParameter(0) = cmd.Parameters.Add("EMPLOYEE", dbType:=Oracle.DataAccess.Client.OracleDbType.Varchar2, size:=8, val:=strEmpId, ParameterDirection.Input)
oracleParameter(1) = cmd.Parameters.Add("ROWCOUNT", dbType:=Oracle.DataAccess.Client.OracleDbType.Int16, val:=strEmpId, ParameterDirection.Output)

Фактическая причина - использование Microsoft реализации Oracle Тип против Oracle Тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...