次の方法で共有


WCF チャネル モデルを使用して Oracle Database で SQLEXECUTE 操作を実行する

このセクションでは、チャネルを介して Oracle データベースに対して SQLEXECUTE 操作を実行する方法について説明します。 SOAP メッセージに対してメッセージとメッセージ アクションの両方を指定する必要があります。 SQLEXECUTE 操作の詳細については、「 WCF サービス モデルを使用して Oracle Database で 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 ステートメントを 1 回呼び出すためのメッセージであるため、パラメーター スキーマとパラメーター ブロックを指定する要素はメッセージ本文から省略されます。 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;  

Note

SQLEXECUTE 操作は、常に弱く型指定された結果セットを返します。

参照

WCF チャネル モデルを使用して Oracle Database アプリケーションを開発する
Oracle Database を使用してチャネルを作成する