Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa sezione illustra come inserire un record in un database Oracle usando un canale. È necessario specificare sia un corpo del messaggio che un'azione di messaggio quando si invia un messaggio.
Messaggio di inserimento
Nel codice XML seguente viene illustrato un corpo del messaggio per un'operazione di inserimento nella tabella HR.EMPLOYEES. Il set di record è costituito da un singolo record relativo a un dipendente. Per altre informazioni sullo schema di un messaggio di inserimento, vedere Schemi dei messaggi per le operazioni di inserimento, aggiornamento, eliminazione e selezione di base su tabelle e viste. Si tratta del contenuto del file Employee_Insert.xml usato nell'esempio.
<!-- New namespace: http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES -->
<Insert xmlns="http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES">
<RECORDSET xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<EMPLOYEESRECORDINSERT>
<EMPLOYEE_ID>0</EMPLOYEE_ID>
<FIRST_NAME>Anton</FIRST_NAME>
<LAST_NAME>Kirilov</LAST_NAME>
<EMAIL></EMAIL>
<PHONE_NUMBER>555-0198</PHONE_NUMBER>
<HIRE_DATE>2007-03-01T00:00:00.0000000</HIRE_DATE>
<JOB_ID>FI_ACCOUNT</JOB_ID>
<SALARY>5000</SALARY>
<COMMISSION_PCT>0.15</COMMISSION_PCT>
<MANAGER_ID>108</MANAGER_ID>
<DEPARTMENT_ID>100</DEPARTMENT_ID>
</EMPLOYEESRECORDINSERT>
</RECORDSET>
</Insert>
Specificare l'azione del messaggio
È necessario specificare un'azione di messaggio quando si invia un messaggio SOAP all'adapter Oracle Database. È possibile specificare l'azione del messaggio quando si crea il messaggio come nell'esempio seguente.
Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert", readerIn2);
L'azione del messaggio in questo esempio, "/HR/Table/EMPLOYEES/Insert", specifica che un'operazione di inserimento nella tabella HR.EMPLOYEES deve essere effettuata.
Invio del messaggio di inserimento
In questo esempio viene illustrato come eseguire un'operazione di inserimento in una tabella Oracle su un canale. Il codice utilizza l'operazione SQLEXECUTE esposta dall'adattatore Oracle Database per restituire il valore successivo di Oracle SEQUENCE. Questo valore viene quindi scritto nel campo EMPLOYEE_ID nel record Inserisci. Questo modello consente di inserire righe nei database con un valore di chiave primaria generato automaticamente. Per altre informazioni sulla chiamata dell'operazione SQLEXECUTE su un canale, vedere Eseguire un'operazione SQLEXECUTE tramite il modello di canale WCF.
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.IO;
using System.ServiceModel;
using System.ServiceModel.Channels;
using Microsoft.ServiceModel.Adapters;
using Microsoft.Adapters.OracleDB;
namespace OracleDMLChannel
{
class Program
{
static void Main(string[] args)
{
// Create Endpoint
EndpointAddress address = new EndpointAddress("oracledb://ADAPTER");
// Create Binding
OracleDBBinding binding = new OracleDBBinding();
// Create Channel Factory
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address);
factory.Credentials.UserName.UserName = "HR";
factory.Credentials.UserName.Password = "TIGER";
factory.Open();
// Create Request Channel
IRequestChannel channel = factory.CreateChannel();
channel.Open();
// Send Request
System.Xml.XmlReader readerIn = System.Xml.XmlReader.Create("SQLExecute.xml");
Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);
Message messageOut = channel.Request(messageIn);
// Get Response XML
XmlReader readerOut = messageOut.GetReaderAtBodyContents();
// Get Employee ID
string id = null;
XmlDocument doc = new XmlDocument();
doc.Load(readerOut);
XmlNodeList list = doc.GetElementsByTagName("ColumnValue");
if (list.Count > 0) id = list[0].InnerXml;
// Compose Insert XML
XmlDocument insertDoc = new XmlDocument();
insertDoc.Load("Employee_Insert.xml");
// Change Employee ID
XmlNodeList empidList = insertDoc.GetElementsByTagName("EMPLOYEE_ID");
XmlNode empidNode = empidList[0];
empidNode.InnerXml = id;
// Change email
XmlNodeList emailList = insertDoc.GetElementsByTagName("EMAIL");
XmlNode emailNode = emailList[0];
emailNode.InnerXml = "scotty" + id + "@microsoft.com";
// Change date
XmlNodeList dateList = insertDoc.GetElementsByTagName("HIRE_DATE");
XmlNode dateNode = dateList[0];
dateNode.InnerXml = "2007-03-01T00:00:00.0000000";
StringReader strReader = new StringReader(insertDoc.InnerXml);
XmlReader readerIn2 = XmlReader.Create(strReader);
// Send XML
Message messageIn2 = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/HR/Table/EMPLOYEES/Insert ", readerIn2);
Message messageOut2 = channel.Request(messageIn2);
// Close the messages
messageOut.Close();
messageOut2.Close();
channel.Close();
}
}
}
Vedere anche
Sviluppare applicazioni di database Oracle usando il modello di canale WCF
Creare un canale con Oracle Database
Eseguire un'operazione SQLEXECUTE usando il modello di canale WCF
Richiamare una funzione nel database Oracle usando il modello di canale WCF