Eseguire l'operazione SQLEXECUTE nel database Oracle usando il modello di servizio WCF
L'adapter BizTalk microsoft per Oracle Database visualizza un set standard di operazioni sugli artefatti del database Oracle. Usando queste operazioni, è possibile eseguire operazioni come chiamare una funzione o una routine Oracle oppure eseguire operazioni DML (BASIC Data Manipulation Language) nelle tabelle. Tuttavia, potrebbero esserci scenari basati sulla logica di business che richiedono di eseguire operazioni che l'adattatore Oracle Database non è disponibile. Ad esempio, è consigliabile:
Eseguire un'operazione sugli artefatti del database che non vengono visualizzati dall'adattatore Oracle Database; ad esempio, ottenere CURVAL o NEXTVAL di una sequenza Oracle.
Eseguire operazioni del linguaggio di definizione dei dati; ad esempio, creare una tabella.
Eseguire operazioni su un artefatto di database non presente in fase di progettazione; ad esempio, aggiornare i record in una tabella temporanea creata dalla logica di business.
Eseguire operazioni DML più complesse sulle tabelle rispetto alle operazioni su cui viene visualizzata l'adapter Di database Oracle; Ad esempio, per eseguire una query che include una clausola JOIN.
Per questi tipi di scenari, l'adapter Di database Oracle visualizza l'operazione SQLEXECUTE. Usando l'operazione SQLEXECUTE, è possibile eseguire un'istruzione SQL con parametri nel database Oracle. L'operazione SQLEXECUTE supporta un blocco di parametri costituito da set di parametri che consentono di eseguire la stessa istruzione SQL una volta per ogni set. L'operazione SQLEXECUTE restituisce i risultati dell'istruzione SQL in un set di record generico.
Informazioni sugli esempi usati in questo argomento
Gli esempi in questo argomento usano una sequenza Oracle denominata TID_SEQ. Uno script per generare questa SEQUENZa viene fornito con gli esempi dell'SDK. Per altre informazioni sugli esempi di SDK, vedere Esempi nell'SDK.
Classe client WCF
Il modello di servizio WCF genera un client WCF dedicato, SQLEXECUTEClient, per l'operazione SQLEXECUTE. Il codice seguente mostra SQLEXECUTEClient e la firma del metodo chiamato per richiamare l'operazione SQLEXECUTE.
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);
}
L'operazione SQLEXECUTE restituisce un set di record generico. Questo set di record contiene i valori (se presenti) restituiti dalle istruzioni eseguite dall'operazione SQLEXECUTE. È possibile passare set di parametri di input all'operazione SQLEXECUTE in una raccolta di oggetti PARAMETERDATA, ognuno dei quali contiene una raccolta di parametri di input rappresentati come stringhe. Il codice seguente mostra la definizione di un set PARAMETERDATA.
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;
}
}
}
}
Chiamata dell'operazione SQLEXECUTE
Per richiamare l'operazione SQLEXECUTE usando un client WCF, seguire questa procedura.
Generare una classe SQLEXECUTEClient per la tabella o la vista di destinazione.
Importante
L'operazione SQLEXECUTE viene visualizzata sotto il nodo radice (/) nel riquadro Selezionare una categoria nella finestra di dialogo Aggiungi riferimento servizio adapter .
Creare un'istanza della classe SQLEXECUTEClient e richiamare il metodo SQLEXECUTE per eseguire istruzioni SQL nel database Oracle.
Per informazioni più dettagliate su come creare una classe client WCF e richiamare operazioni nell'adattatore Oracle Database, vedere Panoramica del modello di servizio WCF con l'adapter Oracle Database.
Nell'esempio seguente viene usato SQLEXECUTEClient per ottenere il valore successivo di una sequenza Oracle, TID_SEQ, eseguendo l'istruzione SQL seguente:
SELECT tid_seq.nextval id from DUAL
. L'output viene quindi scritto nella console.
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");
}
}
Vedere anche
Sviluppare applicazioni di database Oracle usando il modello di servizio WCF