INFO: Visual Basic auf eine Oracle-Datenbank mit ADO

Artikel-ID: 176936 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Eine Microsoft Visual Basic .NET Version dieses Artikels finden Sie unter 308071.
Alles erweitern | Alles schließen

Zusammenfassung

Mit Visual Basic und ADO haben die Möglichkeit, eine Verbindung zu einer Oracle-Datenbank über eine kleiner DSN-Verbindung herzustellen, Ausführen einer gespeicherten Prozedur mit Parametern, und Rückgabewerte von der gespeicherten Prozedur abrufen. Das Beispiel in diesem Artikel veranschaulicht die gesamte Funktionalität.

Weitere Informationen

Ausführen des Beispielcodes in diesem Artikel müssen Sie downloaden und Installieren der Microsoft Data Access Components, wenn Sie Visual Basic 5.0 verwenden. Die MDAC-Komponenten befinden sich unter: http://msdn.microsoft.com/en-us/data/aa937729.aspx das folgende Beispiel, in einer Oracle 7.3 Datenbank über eine SQL erstellt wurde * NET 2.3 Verbindung. Alle im folgenden Code (einschließlich der gespeicherten Prozedur) sollten mit Oracle 7.2 fehlerfrei funktionieren. Der Microsoft ODBC-Treiber für Oracle-Hilfedatei jedoch besagt, dass Sie nur SQL unterstützt * NET 2.3.

Es gibt zwei Objekte, die auf der Oracle-Datenbank erstellt werden müssen; eine Tabelle (Adooracle) und eine gespeicherte Prozedur (Adoinsert).

Hinweis : Wenn Sie über die folgenden Microsoft Knowledge Base gearbeitet haben und Sie können die in diesem Artikel (Rdooracle und Rdoinsert) erstellten Oracle-Objekte verwenden. Nur ändern Sie entsprechend den folgenden Visual Basic-Code:

167225So wird 's gemacht: Zugriff auf eine Oracle-Datenbank RDO mit
Hier sind die Daten Definition Language (DDL) Skripts zum Erstellen dieser Objekte:

ADOORACLE - ist dies nur eine zweispaltige Tabelle mit der ersten Spalte als Primärschlüssel festgelegt:

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


ADOINSERT - diese Prozedur akzeptiert einen einzelnen numerischen Eingabeparameter und gibt einen einzelnen numerischen Ausgabeparameter zurück. Der Eingabeparameter wird zuerst von eine input-Anweisung verwendet, und es geteilt durch 2 und als Output-Parameter festgelegt ist:


      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;
      / 
				

Verwenden Sie in SQL 3.3 einen Forward-Schrägstrich (/) beendet und das Skript deklarieren die gespeicherte Prozedur ausführen.

Hinweis : Prozeduren, die Parameter ausgegeben haben und keine Funktionen beim Arbeiten mit Oracle und ADO-Parameter muss verwendet.

Die vorangegangenen Skripts von SQL ausgeführt werden können * Plus. Nachdem diese Objekte erstellt wurden, können Sie das Visual Basic-Projekt erstellen, das Sie verwenden werden.

Dieses Beispielprojekt verwendet ein einfaches Formular, ein Parameter binden, die ADOINSERT gespeicherte Prozedur zu senden und dann den Ausgabeparameter aus, dass diese Prozedur zurückkehren. Hier sind die Schritte um das Projekt zu erstellen:

  1. Öffnen Sie ein neues Projekt in Visual Basic und fügen Sie einen Verweis auf die Microsoft ActiveX Data Objects-Bibliothek hinzu.
  2. Setzen Sie die folgenden Steuerelemente im Formular:
    
       Control      Name      Text/Caption
    
       Button      cmdCheck    Check
       Button      cmdSend     Send
       Text Box    txtInput
       Label       lblInput    Input:
    
    						
  3. Im Menü Extras Wählen Sie Optionen, klicken Sie auf die Option "Standard Vollständige Modulansicht" und klicken Sie dann auf OK. Dadurch werden alle den Code für dieses Projekt anzuzeigen.
  4. Fügen Sie den folgenden Code in Ihre Code-Fenster:
    
        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. Führen Sie das Projekt aus.
Wenn Sie eine Zahl, in das Textfeld, TxtInput eingeben, und klicken Sie auf die Schaltfläche Senden , wird die Oracle-gespeicherten Prozedur, ADOINSERT, aufgerufen. Die Zahl eingegeben den Text im Feld als der Eingabeparameter für die Prozedur verwendet wird. Der Ausgabeparameter wird in einem Meldungsfeld verwendet, die aufgerufen wird, nachdem die gespeicherte Prozedur Verarbeitung abgeschlossen wurde. Klicken Sie mit Ihren ursprünglichen Wert noch in das Textfeld auf "Suchen". Dadurch kann ein einfacher nur-Lese-Resultset, das in ein anderes Meldungsfeld angezeigt wird.

Folgt eine ausführliche Erläuterung der Code in dieser Demo-Projekt verwendet.

Das Form_Load-Ereignis enthält den Code, kleiner DSN-Verbindung erstellt:

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

				
Nachdem Sie das ADO-Verbindungsobjekt (CN) erstellen, Festlegen verschiedener Parameter mithilfe der WITH-Anweisung.

Die Connect-Zeichenfolge, die eine Verbindung zu einer Oracle-Datenbank (oder jeder Datenbank für die Frage) öffnen verwendet wird, ist sehr abhängig von der zugrunde liegenden ODBC-Treiber. Können Sie in der folgenden Verbindungszeichenfolge, dass der Microsoft Oracle-Treiber verwenden speziell durch DRIVER heißt =:

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

				
der wichtigste Teil dieses Verbindungszeichenfolge ist das Schlüsselwort "SERVER". Die SERVER zugewiesene Zeichenfolge ist der Datenbank-Alias die Sie in SQL haben eingerichtet * NET. Dies ist der einzige Unterschied in der Verbindungszeichenfolge, beim Verbinden mit einer Oracle-Datenbank. Für eine Verbindung DSN kleiner keinen wie in der Hilfedatei angegeben Sie einen DSN in der Verbindungszeichenfolge an.

Auch in das Form_Load-Ereignis Code wird das im Projekt verwendet die beiden Command in ADO-Objekte erstellt:

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
				
das erste Command-Objekt (CPw1) ist eine einfache parametrisierte Abfrage. Die CommandText hat einen Parameter, die die Item_number der Where-Klausel. Beachten Sie, das der CommandType auf AdCmdText eingestellt ist. Dies unterscheidet sich AdCmdStoredProc CommandType im zweiten Command-Objekt (CPw2). Der folgende Code ist aus der ADO-Hilfe HTML-Datei:
"Verwenden Sie die CommandType-Eigenschaft, um die Auswertung der CommandText-Eigenschaft optimieren. Wenn der Wert der CommandType-Eigenschaft AdCmdUnknown (Standardwert) entspricht, können verminderte Leistung auftreten, da ADO Aufrufe an den Anbieter, bestimmen, ob die CommandText-Eigenschaft eine SQL-Anweisung, einer gespeicherten Prozedur oder ein Tabellenname ist vornehmen muss. Wenn Sie, welche Art von Befehl wissen können Sie verwenden und Festlegen der CommandType-Eigenschaft ADO, um den entsprechenden Code direkt aufzurufen weist. Wenn die CommandType-Eigenschaft den Typ des Befehls in der CommandText-Eigenschaft nicht übereinstimmt, tritt ein Fehler beim Aufrufen der Execute-Methode auf."
WITH-Befehl verwenden, können Sie erstellen und Parameter an das Befehlsobjekt leicht anhängen. Der erste Parameter der Funktion CreateParameter ist für den Namen des Parameters. Dies wurde leer gelassen wurde da das Beispielprogramm den Index des Parameters-Auflistung, verwendet um die einzelnen Parameter (z. B. CPw1(0) zum Identifizieren des ersten Parameters) zu identifizieren. Die Beispiel-Anwendung verwendet AdInteger und AdDouble Datentypen. Wenn Sie einen Datentyp variabler Länge verwendet hätten, müssten die Size-Parameter der CreateParameter-Funktion festgelegt werden. Hilfe zu erneut, die ADO HTML:
"Wenn Sie einen Datentyp variabler Länge im Argument Type angeben, Sie übergeben ein Argument Größe oder die Size-Eigenschaft des Parameter-Objekt festzulegen, bevor es an der Parameters-Auflistung angefügt; andernfalls tritt ein Fehler auf."
Der Rest des Projekts ist ziemlich einfach und gut dokumentiert, in der Datei Onlinehilfe und Onlinedokumentation, die im Lieferumfang von Visual Basic. Die ADO Probleme, die zum Arbeiten mit Oracle (die Verbindungszeichenfolge und Aufrufen von gespeicherten Prozeduren) wichtig sind haben in dieses Projekt ausführlich beschrieben wurde.

Informationsquellen

Weitere Informationen zu diesen Problemen finden Sie in Ihrem Oracle SQL * NET 2.3 Dokumentation die Hilfedatei für den Microsoft ODBC-Treiber für Oracle, den ADO HTML-Code, der mit MDAC, geliefert wird, die Onlinedokumentation bietet Visual Basic 6.0 oder in der Oracle 7-Server-Dokumentation.

Microsoft ODBC-Treiber für Oracle-Hilfedatei

HTML-Hilfe von ADO

"Oracle PL/SQL Programming" von Steven Feuerstein

"Hitchhiker's Guide to Visual Basic & SQL Server" von William Vaughn fünfte Edition

Weitere Informationen finden Sie in die folgenden Artikeln der Microsoft Knowledge Base:
174679So wird 's gemacht: Abrufen von Resultsets von Oracle gespeicherten Prozeduren

175018So wird 's gemacht: Erwerben und Installieren des Microsoft Oracle ODBC-Treibers

174981So wird 's gemacht: Abrufen von Standard Resultsets von Oracle gespeicherten Prozeduren

167225So wird 's gemacht: Zugriff auf eine Oracle-Datenbank RDO mit

176086So wird 's gemacht: Abrufen von Recordsets von Oracle gespeicherte Prozeduren mit ADO

Eigenschaften

Artikel-ID: 176936 - Geändert am: Mittwoch, 2. März 2005 - Version: 4.4
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbdatabase kbinfo kboracle kbstoredproc KB176936 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 176936
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns