WCF チャネル モデルを使用して SQL のテーブルに対して挿入操作を実行する
SQL アダプターは、データベース テーブルとビューに対する基本的な挿入、選択、更新、および削除の一連SQL Server検出します。 これらの操作を使用すると、ターゲット テーブルまたはビューの Where 句で修飾された単純な SQL Insert、Select、Update、Delete ステートメントを実行できます。 このトピックでは、WCF チャネル モデルを使用して、SQL Server データベース テーブルに対して挿入操作を実行する方法について説明します。
アダプターがこれらの操作をサポートする方法の詳細については、「SQL アダプターを使用した テーブルとビューに対する挿入、更新、削除、および選択操作」を参照してください。 WCF チャネル モデルを使用してSQL Serverに対して操作を実行する方法の詳細については、「SQL アダプターを使用した WCF チャネル モデルの概要」を参照してください。
このトピックで使用する例について
このトピックの例では、Employee テーブルに対して操作を実行します。 Employee テーブルは、サンプルで提供される SQL スクリプトを実行して作成されます。 サンプルの詳細については、「 SQL アダプターのサンプル」を参照してください。 このトピックに基づく EmployeeInsertOp のサンプルも、SQL アダプターのサンプルと共に提供されています。
メッセージの挿入
WCF チャネル モデルを使用してSQL Server データベースに対して操作を実行するには、操作に固有の要求メッセージが必要です。 SQL Server データベースの Employee テーブルに対して挿入操作を実行する要求メッセージは、次のようになります。
<Insert xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee">
<Rows>
<Employee xmlns="http://schemas.microsoft.com/Sql/2008/05/Types/Tables/dbo">
<Name>Tom Smith</Name>
<Designation>Manager</Designation>
<Salary>500000</Salary>
</Employee>
</Rows>
</Insert>
この要求メッセージは、次の詳細を含むレコードを挿入します。
Name = Tom Smith
Designation = Manager
Salary = 500000
InsertRequest.xml など、ファイルにメッセージをコピーする必要があります。 このファイルは、SQL アダプターを使用して要求メッセージをSQL Serverに送信するために、この例で使用します。 テーブルに対する操作のメッセージ スキーマの詳細については、「 挿入、更新、削除、およびテーブルとビューに対する操作の選択」のメッセージ スキーマに関するページを参照してください。
WCF チャネル アプリケーションの作成
このセクションでは、Employee テーブルに対して挿入操作を実行する WCF チャネル アプリケーションを作成する方法について説明します。
Employee テーブルにレコードを挿入するための WCF チャネル アプリケーションを作成するには
Visual Studio で Visual C# プロジェクトを作成します。 このトピックでは、コンソール アプリケーションを作成します。
ソリューション エクスプローラーで、および への参照を
Microsoft.Adapters.Sql
Microsoft.ServiceModel.Channels
System.ServiceModel
追加します。System.Runtime.Serialization
Program.cs ファイルを開き、次の名前空間を追加します。
Microsoft.Adapters.Sql
Microsoft.ServiceModel.Channels
System.ServiceModel
System.ServiceModel.Channels
System.Xml
バインディングとエンドポイントを作成します。
SqlAdapterBinding binding = new SqlAdapterBinding(); EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");
チャネル ファクトリを作成して開きます。 このアプリケーションは、SQL Serverに要求メッセージを送信し、応答を受信するため、IRequestChannel インターフェイスを実装する必要があります。
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, address); factory.Credentials.UserName.UserName = "<Enter user name here>"; factory.Credentials.UserName.Password = "<Enter password here>"; factory.Open();
チャネルを作成して開きます。
IRequestChannel channel = factory.CreateChannel(); channel.Open();
要求メッセージを作成して送信します。
XmlReader readerIn; Console.WriteLine("Creating the message"); try { readerIn = XmlReader.Create("InsertRequest.xml"); Console.WriteLine("Reader created"); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; } Message messageIn = Message.CreateMessage(MessageVersion.Default, "TableOp/Insert/dbo/Employee", readerIn); Message messageOut = channel.Request(messageIn);
要求メッセージの作成時に、アダプターがSQL Server テーブルで実行するアクションを示すメッセージ アクションを指定する必要があります。 Employee テーブルに対して挿入操作を実行するには、メッセージ アクションは です
TableOp/Insert/dbo/Employee
。 テーブルに対するさまざまな操作のメッセージ アクションを決定する方法については、「 テーブルとビューに対する挿入、更新、削除、および選択操作のメッセージ スキーマ」を参照してください。応答メッセージを取得します。
XmlReader readerOut = messageOut.GetReaderAtBodyContents(); XmlDocument doc = new XmlDocument(); doc.Load(readerOut); doc.Save("C:\\Response.xml");
メッセージ、チャネル、チャネル ファクトリを閉じます。
messageOut.Close(); channel.Close(); factory.Close();
プロジェクトをビルドします。 プロジェクトをビルドした後、次のタスクを実行する必要があります。
InsertRequest.xml 要求メッセージを、プロジェクトの実行可能ファイルと同じ場所にコピーします。 通常、この場所はプロジェクト ディレクトリの下の \bin\Debug\ です。
この例で使用される "Employee" テーブルには、Point ユーザー定義型 (UDT) の列があります。 そのため、プロジェクトを実行する前に、「User-Defined 型の作成」で説明されているように、Point UDT のアセンブリ を作成する必要があります。 また、プロジェクト実行可能ファイルと同じ場所にアセンブリ DLL をコピーする必要もあります。 通常、この場所はプロジェクト ディレクトリの下の \bin\Debug\ です。
アプリケーションを実行します。 応答メッセージ Response.xml は、アプリケーションで指定した場所に保存されます。 応答メッセージには、新しく追加された従業員の ID が含まれており、次のようになります。
<InsertResponse xmlns="http://schemas.microsoft.com/Sql/2008/05/TableOp/dbo/Employee"> <InsertResult> <long xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">10006</long> </InsertResult> </InsertResponse>
Employee テーブルには id 列としてEmployee_ID列があるため、挿入操作は、新しく挿入されたレコードの ID 列の値を返します。 テーブルに ID 列がない場合、戻り値は NULL です。