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.
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.
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