本部分说明如何在通道上对 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操作始终返回弱类型的结果集。