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