INFO: Visual Basic acessando um banco de dados Oracle usando ADO

Traduções deste artigo Traduções deste artigo
ID do artigo: 176936 - Exibir os produtos aos quais esse artigo se aplica.
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 308071.
Expandir tudo | Recolher tudo

Sumário

Com o Visual Basic e o ADO, você tem a capacidade de se conectar a um banco de dados Oracle através de uma conexão DSN menor, executar um procedimento armazenado usando parâmetros e obter valores de retorno do procedimento armazenado. O exemplo neste artigo ilustra toda essa funcionalidade.

Mais Informações

Para executar o código de exemplo neste artigo, talvez seja necessário baixar e instalar o Microsoft Data Access Components se você estiver usando o Visual Basic 5.0. Os componentes MDAC estão localizados em: http://msdn.microsoft.com/en-us/data/aa937729.aspx o seguinte exemplo foi criado em um banco de dados Oracle 7.3 através de um SQL * NET 2.3 conexão. Todo o código seguinte (incluindo o procedimento armazenado) deve funcionar bem com Oracle 7.2. No entanto, o Driver Microsoft ODBC para Oracle ajuda arquivo indica que ele oferece suporte apenas a SQL * NET 2.3.

Há dois objetos que precisam ser criados no banco de dados Oracle; uma tabela (adooracle) e um procedimento armazenado (adoinsert).

Observação : se você tiver trabalhado com o seguinte artigo, você pode usar os objetos Oracle criados no artigo (rdooracle e rdoinsert). Apenas altere adequadamente o código de Visual Basic abaixo:

167225COMO: Acessar um banco de dados Oracle usando RDO
Aqui estão os scripts DDL (linguagem) de definição de dados para criar esses objetos:

ADOORACLE - é apenas uma tabela de duas colunas com a primeira coluna definido como chave primária:

      CREATE TABLE adooracle (
            item_number    NUMBER(3) PRIMARY KEY,
            depot_number   NUMBER(3));
				


ADOINSERT - esse procedimento aceita um único parâmetro de entrada numérico e retorna um parâmetro de saída numérico simples. O parâmetro de entrada é usado por uma instrução de entrada pela primeira vez, ela é dividida por 2 e definida como o parâmetro de saída:


      CREATE OR REPLACE PROCEDURE adoinsert (
            insnum IN NUMBER, outnum OUT NUMBER)
      IS
      BEGIN
        INSERT INTO adooracle
          (Item_Number, Depot_Number)
        VALUES
          (insnum, 16);
        outnum := insnum/2;
      END;
      / 
				

No SQL 3.3, use uma foward barra (/) para terminar e execute o script declarar o procedimento armazenado.

Observação : você deve usar funções não e procedimentos que tenham parâmetros de saída ao trabalhar com parâmetros Oracle e ADO.

Os scripts anteriores podem ser executados do SQL * Plus. Uma vez que esses objetos foram criados, você pode criar o projeto de Visual Basic irá usá-los.

Este projeto de exemplo usa um formulário simples para enviar que um parâmetro de ligação para o ADOINSERT procedimento armazenado e, em seguida, retornar o parâmetro de saída desse procedimento. Aqui estão as etapas para criar o projeto:

  1. Abra um novo projeto no Visual Basic e adicione uma referência à biblioteca Microsoft ActiveX Data Objects.
  2. Posicione o seguinte os controles no formulário:
    
       Control      Name      Text/Caption
    
       Button      cmdCheck    Check
       Button      cmdSend     Send
       Text Box    txtInput
       Label       lblInput    Input:
    
    						
  3. No menu Ferramentas, escolha ' Opções ', clique na opção "Padrão Visualizar módulo completo" e, em seguida, clique em OK. Isso permite que você exibir todos os o código para este projeto.
  4. Cole o código seguinte na sua janela de código:
    
        Option Explicit
        Dim Cn As ADODB.Connection
        Dim CPw1 As ADODB.Command
        Dim CPw2 As ADODB.Command
        Dim Rs As ADODB.Recordset
        Dim Conn As String
        Dim QSQL As String
    
        Private Sub cmdCheck_Click()
    
          CPw1(0) = Val(txtInput.Text)
    
          Set Rs = CPw1.Execute
    
          MsgBox "Item_Number = " & Rs(0) & ".  Depot_Number = " & Rs(1) & "."
    
          Rs.Close
    
        End Sub
    
        Private Sub cmdSend_Click()
    
           CPw2(0) = Val(txtInput.Text)
    
           CPw2.Execute
    
           MsgBox "Return value from stored procedure is " & CPw2(1) & "."
    
        End Sub
    
        Private Sub Form_Load()
    
           'You will need to replace the "*" with the appropriate values.
           Conn = "UID=*****;PWD=****;DRIVER={Microsoft ODBC for Oracle};" _
                & "SERVER=*****;"
    
           Set Cn = New ADODB.Connection
    
           With Cn
             .ConnectionString = Conn
             .CursorLocation = adUseClient
             .Open
           End With
    
           QSQL = "Select Item_Number, Depot_Number From adooracle Where " _
           & "item_number = ?"
    
           Set CPw1 = New ADODB.Command
    
           With CPw1
             .ActiveConnection = Cn
             .CommandText = QSQL
             .CommandType = adCmdText
             .Parameters.Append .CreateParameter(, adInteger, adParamInput)
           End With
    
           QSQL = "adoinsert"
    
           Set CPw2 = New ADODB.Command
    
           With CPw2
             .ActiveConnection = Cn
             .CommandText = QSQL
             .CommandType = adCmdStoredProc
             .Parameters.Append .CreateParameter(, adInteger, adParamInput)
             .Parameters.Append .CreateParameter(, adDouble, adParamOutput)
           End With
    
        End Sub
    
        Private Sub Form_Unload(Cancel As Integer)
    
           Cn.Close
           Set Cn = Nothing
           Set CPw1 = Nothing
           Set CPw2 = Nothing
    
        End Sub
    
    					
  5. Execute o projeto.
Quando você insere um número na caixa de texto, txtInput e clique no botão Enviar , o procedimento armazenado Oracle, ADOINSERT, é chamado. O número inserido no texto da caixa é usada como o parâmetro de entrada para o procedimento. O parâmetro de saída é usado em uma caixa de mensagem que é chamada após o procedimento armazenado concluiu o processamento. Com seu valor original ainda na caixa de texto, clique no botão "Verificação". Isso cria um simples resultset somente leitura é exibido em outra caixa de mensagem.

O que se segue é uma explicação detalhada do código usada no projeto demonstração.

O evento Form_Load contém o código que cria a conexão DSN menor:

Conn = "UID=<uid>;PWD=<pwd>;DRIVER={Microsoft ODBC for Oracle};" _
           & "SERVER=<MyServer>;"

   Set Cn = New ADODB.Connection

   With Cn
       .ConnectionString = Conn
       .CursorLocation = adUseClient
       .Open
   End With

				
depois que você criar o objeto de conexão ADO (CN), você definir vários de seus parâmetros usando a instrução WITH.

A seqüência de conexão que é usada para abrir uma conexão com um banco de dados Oracle (ou qualquer banco de dados para essa questão) é muito dependente do driver ODBC subjacente. Você pode ver na seqüência de caracteres de conexão abaixo que o driver de Microsoft Oracle que você está usando é chamado especificamente por DRIVER =:

Conn = "UID=<uid>;PWD=<pwd>;DRIVER={Microsoft ODBC for Oracle};" _
           & "SERVER==<MyServer>;"

				
a parte mais importante dessa seqüência de conexão é a palavra-chave "SERVER". A seqüência atribuída ao servidor é o alias de banco de dados que você configura no SQL * NET. Essa é a única diferença na seqüência de caracteres de conexão ao se conectar a um banco de dados Oracle. Para uma conexão DSN menor, conforme indicado no arquivo de Ajuda, você não especificar um DSN na seqüência de caracteres de conexão.

Também no Form_Load evento é o código que cria os dois objetos Command do ADO usados no projeto:

QSQL = "Select Item_Number, Depot_Number From adooracle Where " _
   & "item_number = ?"

   Set CPw1 = New ADODB.Command

   With CPw1
       .ActiveConnection = Cn
       .CommandText = QSQL
       .CommandType = adCmdText
       .Parameters.Append .CreateParameter(, adInteger, adParamInput)
   End With

   QSQL = "adoinsert"

   Set CPw2 = New ADODB.Command

   With CPw2
       .ActiveConnection = Cn
       .CommandText = QSQL
       .CommandType = adCmdStoredProc
       .Parameters.Append .CreateParameter(, adInteger, adParamInput)
       .Parameters.Append .CreateParameter(, adDouble, adParamOutput)
   End With
				
o primeiro objeto de comando (CPw1) é uma simples consulta parametrizada. O CommandText tem um parâmetro que é o item_number para onde cláusula. Observe que o CommandType se está definido como adCmdText. Isso é diferente de adCmdStoredProc CommandType no segundo objeto de comando (CPw2). Este é do arquivo HTML de Ajuda do ADO:
"Use a propriedade CommandType para otimizar a avaliação da propriedade CommandText. Se o valor da propriedade CommandType for igual a adCmdUnknown (o valor padrão), você pode enfrentar desempenho quedo porque ADO deve fazer chamadas para o provedor para determinar se a propriedade CommandText é uma instrução SQL, um procedimento armazenado ou um nome de tabela. Se você souber que tipo de comando você está usando, definindo o CommandType propriedade instrui o ADO para ir diretamente para o código relevante. Se a propriedade CommandType não coincidir com o tipo de comando na propriedade CommandText, ocorrerá um erro quando você chama o método Execute."
Usando o comando com, você pode criar e acrescentar parâmetros facilmente o objeto de comando. O primeiro parâmetro da função CreateParameter é o nome do parâmetro. Isso foi deixado em branco porque o programa de exemplo usa o índice da coleção de parâmetros para identificar os parâmetros individuais (como CPw1(0) para identificar o primeiro parâmetro). O programa de exemplo usa adInteger e adDouble tipos de dados. Se ele tivesse usado o tipo de dados um comprimento variável, o parâmetro de função CreateParameter tamanho precisará ser definido. Novamente, de ADO Ajuda em HTML:
"Se você especificar um tipo de dados de comprimento variável no argumento Tipo de, você deve passar um argumento de tamanho ou defina a propriedade tamanho do objeto Parameter antes de acrescentá-lo à coleção Parameters; caso contrário, ocorrerá um erro."
O restante do projeto é bastante simples e bem documentadas no arquivo de Ajuda Online e livros online que vêm com o Visual Basic. Os problemas de ADO que são críticos para trabalhar com Oracle (a seqüência de conexão e a chamada de procedimentos armazenados) tem sido detalhados neste projeto.

Referências

Para obter mais informações sobre essas questões, consulte o Oracle SQL * NET 2.3 documentação, o arquivo de Ajuda para o Driver Microsoft ODBC para Oracle, o HTML ADO que vem com o MDAC, manuais online que vem com Visual Basic 6.0 ou a documentação do servidor Oracle 7.

Driver Microsoft ODBC para Oracle arquivo de Ajuda

ADO ajuda HTML

"Oracle PL/SQL Programming" por Steven Feuerstein

"Hitchhiker ' s Guide para o Visual Basic & SQL Server" por William Vaughn, quinto Edition

Para obter informações adicionais, leia os seguintes artigos na Base de dados de Conhecimento da Microsoft:
174679COMO: Recuperar conjunto de resultados do Oracle procedimentos armazenados

175018COMO: Obter e instalar o driver ODBC do Microsoft Oracle

174981COMO: Recuperar conjunto de típicos resultados do Oracle procedimentos armazenados

167225COMO: Acessar um banco de dados Oracle usando RDO

176086COMO: Recuperar Recordsets do Oracle armazenados procedimentos usando o ADO

Propriedades

ID do artigo: 176936 - Última revisão: quarta-feira, 2 de março de 2005 - Revisão: 4.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
Palavras-chave: 
kbmt kbdatabase kbinfo kboracle kbstoredproc KB176936 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 176936

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com