Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Faccruz

[Resolvido] Chamar Stored Procedures em Oracle no VB.Net

Recommended Posts

Boa tarde,

 

Como faço para chamar stored Procedures em Oracle pelo VB.Net (Windows Forms)?

 

Estou utilizando VS2k8 com os componentes de conexão OracleClient.NET. Minha procedure tem 3 entradas e 2 saidas.

 

Estou fazendo dessa forma:

 

Dim cmd As New OracleCommand
      cmd.CommandType = CommandType.StoredProcedure
      cmd.CommandText = "CYBELAR_IMP_CRESCABR25_TXT(@ARQ, @DIR, /home/gemco/integra/CRESCABR/LOG)"
      cmd.Parameters.Add(New OracleParameter("@ARQ", edtArqPass25.Text))
      cmd.Parameters.Add(New OracleParameter("@DIR", edtDirPass25.Text))

      cmd.Connection = cnn
      cmd.ExecuteNonQuery()

Mas retorna o erro

ORA-01036: illegal variable name/number

Pelo que percebi esse erro é de quantidade de variaveis diferentes. Mas como faço para passar os parametros de retorno?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mudei um pouco o modo que estava fazendo. E mudou o erro também:

 

VB.NET

Try
            If edtArqPass25.Text <> String.Empty Then
                Dim cmd As New OracleCommand

                cmd.Connection = cnn
                cmd.CommandText = "CYBELAR_IMP_CRESCABR25_TXT"
                '(:pArquivo, :pDiretorio, :pDirLog, :pStatusInt, :pErroArq, :pArqLog)

                cmd.CommandType = CommandType.StoredProcedure

                'Parametros de Entrada
                cmd.Parameters.Add("P_NOME_ARQ", OracleType.VarChar).Value = edtArqPass25.Text
                cmd.Parameters.Add("P_DIRETORIO", OracleType.VarChar).Value = edtDirPass25.Text
                cmd.Parameters.Add("P_DIR_LOG", OracleType.VarChar).Value = "\home\gemco\integra\CRESCABR\LOG"

                'Parametros de Saida
                cmd.Parameters.Add("P_STATUS_INT", OracleType.Number).Direction = ParameterDirection.ReturnValue
                cmd.Parameters.Add("P_ERRO_ARQ", OracleType.VarChar).Direction = ParameterDirection.ReturnValue
                cmd.Parameters.Add("P_ARQ_LOG", OracleType.VarChar).Direction = ParameterDirection.ReturnValue

                cnn.Open()
                cmd.ExecuteNonQuery()

                Dim iStatusInt As Integer = cmd.Parameters("P_STATUS_INT").Value
                Dim sErroArq As String = cmd.Parameters("P_ERRO_ARQ").Value
                Dim sArqLog As String = cmd.Parameters("P_ARQ_LOG").Value

                MsgBox(iStatusInt)
                MsgBox(sErroArq)
                MsgBox(sArqLog)

            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Ocorreu um erro.")

        Finally
            cnn.Close()
        End Try

Erro:

PARAMETRO 'P_ERRO_ARQ': NENHUM CONJUNTO DE TAMANHO PARA O TIPO DE DADO DO TAMANHO DA VARIAVEL: STRING

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se executar esta procedure diretamente no banco de dados por um gerenciador da certo?

 

Abraços...

 

Sim, pelo PLSQL esta normal.

 

Consegui resolver, segue os procedimentos

 

Imports System
Imports System.Data
Imports System.Text
Imports System.Data.OleDb
Imports System.Collections.Generic

    Private strConn As String = "Provider=MSDAORA;Data Source=ORCL;User ID=GEMCO;Password=GEMCO"
    Dim cnn As New OleDbConnection(strConn)
    Dim cmd As OleDbCommand
    'PARAMETROS DE ENTRADA
    Dim pNomArq As OleDbParameter
    Dim pDir As OleDbParameter
    Dim pDirLog As OleDbParameter
    'PARAMETROS DE SAIDA
    Dim pStatus As OleDbParameter
    Dim pErroInt As OleDbParameter
    Dim pArqLog As OleDbParameter


Public Sub CriaParametros(ByVal sProcedure As String)
        cnn.Open()
        cmd = New OleDbCommand(sProcedure, cnn)
        cmd.CommandType = CommandType.StoredProcedure
        cmd.CommandText = sProcedure

        'parametros de entrada
        pNomArq = cmd.Parameters.Add("P_NOME_ARQ", OleDbType.LongVarChar, 100)
        pNomArq.Direction = ParameterDirection.Input
        pDir = cmd.Parameters.Add("P_DIRETORIO", OleDbType.LongVarChar, 100)
        pDir.Direction = ParameterDirection.Input
        pDirLog = cmd.Parameters.Add("P_DIR_LOG", OleDbType.LongVarChar, 100)
        pDirLog.Direction = ParameterDirection.Input

        'PARAMETROS DE SAIDA
        pStatus = cmd.Parameters.Add("P_STATUS_INT", OleDbType.Numeric, 5)
        pStatus.Direction = ParameterDirection.Output
        pErroInt = cmd.Parameters.Add("P_ERRO_ARQ", OleDbType.LongVarChar, 100)
        pErroInt.Direction = ParameterDirection.Output
        pArqLog = cmd.Parameters.Add("P_ARQ_LOG", OleDbType.LongVarChar, 100)
        pArqLog.Direction = ParameterDirection.Output

    End Sub

Public Sub ExecutaProcedure(ByVal sNomeArq As String, ByVal sDir As String, ByVal sDirLog As String)
        Try
            cmd.Parameters("P_NOME_ARQ").Value = sNomeArq
            cmd.Parameters("P_DIRETORIO").Value = sDir
            cmd.Parameters("P_DIR_LOG").Value = sDirLog

            cmd.ExecuteNonQuery()

            Dim sStatus As Integer = CInt(cmd.Parameters("P_STATUS_INT").Value)
            Dim sErro As String = CStr(cmd.Parameters("P_ERRO_ARQ").Value)
            Dim sArqLog As String = CStr(cmd.Parameters("P_ARQ_LOG").Value)

            If sStatus = 2 Then
                edtAvisos.Text += "Ocorreu um erro. Verifique a mensagem a seguir." & vbNewLine
            End If

            edtAvisos.Text += sNomeArq & " " & sErro & vbNewLine
            edtAvisos.Text += sArqLog & vbNewLine

        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            cnn.Close()
            Application.DoEvents()

        End Try
    End Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.