Faccruz 0 Denunciar post Postado Julho 22, 2009 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/numberPelo 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
quintelab 91 Denunciar post Postado Julho 22, 2009 Você pode informar o tipo do parâmetro de entrada: http://www.freevbcode.com/ShowCode.Asp?ID=9405 http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_21646735.html Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Julho 23, 2009 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
quintelab 91 Denunciar post Postado Julho 23, 2009 Se executar esta procedure diretamente no banco de dados por um gerenciador da certo? Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Faccruz 0 Denunciar post Postado Julho 24, 2009 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