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

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

SQLEXECUTE 消息

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

<?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 Database 应用程序
使用 Oracle 数据库创建通道