使用 WCF 通道模型在 Oracle 数据库中运行 SQLEXECUTE 操作

本部分说明如何在通道上对 Oracle 数据库执行 SQLEXECUTE 操作。 必须在 SOAP 消息中同时指定一条消息和一个消息操作。 有关 SQLEXECUTE 操作的详细信息,请参阅 使用 WCF 服务模型在 Oracle 数据库中运行 SQLEXECUTE 操作

SQLEXECUTE 消息

以下 XML 显示一条 SQLEXECUTE 消息,该消息返回 Oracle SEQUENCE 的下一个值。

<?xml version="1.0" encoding="utf-8" ?>  
<!-- New Action: http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE -->  
<SQLEXECUTE xmlns="http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE">  
    <SQLSTATEMENT>SELECT tid_seq.nextval id FROM dual</SQLSTATEMENT>  
</SQLEXECUTE>  

SQLEXECUTE 可以指定参数架构元素和包含多个参数数据集的参数块。 显示的消息用于对指定的 SQL 语句进行单个调用,以便从消息正文中省略指定参数架构和参数块的元素。 有关 SQLEXECUTE 操作的消息架构的信息,请参阅 SQLEXECUTE 操作的消息架构

指定SQLEXECUTE操作

必须为消息指定一个操作。 以下代码摘录演示如何为 SQLEXECUTE 消息指定作用。

Message messageIn = Message.CreateMessage(MessageVersion.Default, "http://Microsoft.LobServices.OracleDB/2007/03/SQLEXECUTE", readerIn);  

发送 SQLEXECUTE 消息

以下代码摘录演示如何通过通道对 Oracle 数据库调用 SQLEXECUTE 操作。

// 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 = "SCOTT";  
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 tid_seq SEQUENCE  
string id = null;  
XmlDocument doc = new XmlDocument();  
doc.Load(readerOut);  
XmlNodeList list = doc.GetElementsByTagName("ColumnValue");  
if (list.Count > 0) id = list[0].InnerXml;  

注释

SQLEXECUTE操作始终返回弱类型的结果集。

另请参阅

使用 WCF 通道模型开发 Oracle 数据库应用程序
使用 Oracle 数据库创建通道