使用 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 操作始终返回弱类型的结果集。