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 を使用してチャネルを作成する