Freigeben über


Ausführen des SQLEXECUTE-Vorgangs in Oracle-Datenbank mithilfe des WCF-Dienstmodells

DerMicrosoft BizTalk-Adapter für Oracle-Datenbank zeigt einen Standardsatz von Vorgängen für Oracle-Datenbankartefakte an. Mit diesen Vorgängen können Sie beispielsweise eine Oracle-Funktion oder -Prozedur aufrufen oder grundlegende SQL Data Manipulation Language (DML)-Vorgänge für Tabellen ausführen. Es kann jedoch Szenarien geben, die von Ihrer Geschäftslogik gesteuert werden und für die Sie Vorgänge ausführen müssen, die vom Oracle Database-Adapter nicht angezeigt werden. Sie möchten beispielsweise Folgendes durchführen:

  • Führen Sie einen Vorgang für Datenbankartefakte aus, die nicht vom Oracle Database-Adapter angezeigt werden. Rufen Sie beispielsweise curval oder NEXTVAL einer Oracle SEQUENCE ab.

  • Ausführen von Data Definition Language-Vorgängen; Erstellen Sie beispielsweise eine Tabelle.

  • Führen Sie Vorgänge für ein Datenbankartefakt aus, das zur Entwurfszeit nicht vorhanden war; Aktualisieren Sie beispielsweise Datensätze in einer temporären Tabelle, die von Ihrer Geschäftslogik erstellt wird.

  • Führen Sie komplexere DML-Vorgänge für Tabellen aus als die Vorgänge, die der Oracle Database-Adapter anzeigt; beispielsweise, um eine Abfrage auszuführen, die eine JOIN-Klausel enthält.

    Für diese Art von Szenarien zeigt der Oracle Database-Adapter den SQLEXECUTE-Vorgang an. Mithilfe des SQLEXECUTE-Vorgangs können Sie eine parametrisierte SQL-Anweisung für die Oracle-Datenbank ausführen. Der SQLEXECUTE-Vorgang unterstützt einen Eingabeparameterblock, der aus Parametersätzen besteht, mit denen Sie dieselbe SQL-Anweisung einmal für jeden Satz ausführen können. Der SQLEXECUTE-Vorgang gibt die Ergebnisse der SQL-Anweisung in einem generischen Datensatzsatz zurück.

Informationen zu den in diesem Thema verwendeten Beispielen

In den Beispielen in diesem Thema wird eine Oracle SEQUENCE mit dem Namen TID_SEQ verwendet. Ein Skript zum Generieren dieser SEQUENZ wird mit den SDK-Beispielen bereitgestellt. Weitere Informationen zu den SDK-Beispielen finden Sie unter Beispiele im SDK.

Die WCF-Clientklasse

Das WCF-Dienstmodell generiert einen dedizierten WCF-Client, SQLEXECUTEClient, für den SQLEXECUTE-Vorgang. Der folgende Code zeigt den SQLEXECUTEClient und die Signatur der Methode, die Sie zum Aufrufen des SQLEXECUTE-Vorgangs aufrufen.

public partial class SQLEXECUTEClient : System.ServiceModel.ClientBase<SQLEXECUTE>, SQLEXECUTE {  
  
    ...  
  
    public microsoft.lobservices.oracledb._2007._03.GenRecordRow[] SQLEXECUTE(string SQLSTATEMENT, string PARAMETERSCHEMA, microsoft.lobservices.oracledb._2007._03.PARAMETERDATA[] PARAMETERSET);   
}  

Der SQLEXECUTE-Vorgang gibt einen generischen Datensatzsatz zurück. Dieser Datensatz enthält die Werte (falls vorhanden), die von den Anweisungen zurückgegeben werden, die vom SQLEXECUTE-Vorgang ausgeführt werden. Sie können Sätze von Eingabeparametern an den SQLEXECUTE-Vorgang in einer Auflistung von PARAMETERDATA-Objekten übergeben, die jeweils eine Auflistung von Eingabeparametern enthält, die als Zeichenfolgen dargestellt werden. Der folgende Code zeigt die Definition einer PARAMETERDATA-Gruppe.

namespace microsoft.lobservices.oracledb._2007._03 {  
    using System.Runtime.Serialization;  
  
    [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Runtime.Serialization", "3.0.0.0")]  
    [System.Runtime.Serialization.DataContractAttribute()]  
    public partial class PARAMETERDATA : object, System.Runtime.Serialization.IExtensibleDataObject {  
  
        ...  
  
        private string[] PARAMETERField;  
  
        ...  
  
        [System.Runtime.Serialization.DataMemberAttribute()]  
        public string[] PARAMETER {  
            get {  
                return this.PARAMETERField;  
            }  
            set {  
                this.PARAMETERField = value;  
            }  
        }  
    }  
}  

Aufrufen des SQLEXECUTE-Vorgangs

Führen Sie die folgenden Schritte aus, um den SQLEXECUTE-Vorgang mithilfe eines WCF-Clients aufzurufen.

  1. Generieren Sie eine SQLEXECUTEClient-Klasse für die Zieltabelle oder -sicht.

    Wichtig

    Der SQLEXECUTE-Vorgang wird unter dem Stammknoten (/) im Bereich Kategorie auswählen im Dialogfeld Adapterdienstreferenz hinzufügen angezeigt.

  2. Erstellen Sie eine instance der SQLEXECUTEClient-Klasse, und rufen Sie die SQLEXECUTE-Methode auf, um SQL-Anweisungen in der Oracle-Datenbank auszuführen.

    Ausführlichere Informationen zum Erstellen einer WCF-Clientklasse und zum Aufrufen von Vorgängen für den Oracle Database-Adapter finden Sie unter Übersicht über das WCF-Dienstmodell mit dem Oracle Database-Adapter.

    Im folgenden Beispiel wird der SQLEXECUTEClient verwendet, um den nächsten Wert einer Oracle SEQUENCE TID_SEQ abzurufen, indem die folgende SQL-Anweisung ausgeführt wird: SELECT tid_seq.nextval id from DUAL. Die Ausgabe wird dann in die Konsole geschrieben.

using (SQLEXECUTEClient sqlClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE"))  
{  
    sqlClient.ClientCredentials.UserName.UserName = "SCOTT";  
    sqlClient.ClientCredentials.UserName.Password = "TIGER";  
    try  
    {  
        sqlClient.Open();  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error opening SQL client " + ex.Message);  
        throw;  
    }  
    microsoft.lobservices.oracledb._2007._03.GenRecordRow[] sequenceRec =   
        new microsoft.lobservices.oracledb._2007._03.GenRecordRow[0];  
  
    try  
    {  
        sequenceRec = sqlClient.SQLEXECUTE("SELECT tid_seq.nextval id from DUAL", null, null);  
    }  
    catch (Exception ex)  
    {  
        Console.WriteLine("Error executing SQL client " + ex.Message);  
        throw;  
    }  
  
    if (sequenceRec.Length > 0)  
    {  
        Console.WriteLine("TID_SEQUENCE value is {0}", sequenceRec[0].GenRecordColumn[0].ColumnValue);  
    }  
    else  
    {  
    Console.WriteLine("Couldn't get next TID_SEQUENCE value");  
    }  
}  

Weitere Informationen

Entwickeln von Oracle Database-Anwendungen mithilfe des WCF-Dienstmodells