このチュートリアルでは、Visual C# を使用して Microsoft .NET 内から SQL Anywhere Web サービス・データ型のサポートを使用する方法を示します。
コマンド・プロンプトで、次のコマンドを実行して、パーソナル Web サーバを起動します。samples-dir をサンプル・データベースの実際のロケーションと置き換えます。-xs http(port=80)
オプションは、HTTP 要求をポート 80 で受け入れるようにデータベース・サーバに指示します。すでにポート 80 で稼働している Web サーバがある場合は、このチュートリアルには 8080 などの別のポート番号を使用してください。
dbeng11 -xs http(port=80) samples-dir\demo.db |
Interactive SQL を起動します。DBA として SQL Anywhere サンプル・データベースに接続します。次の文を実行します。
Employees テーブルをリストする SOAP サービスを定義します。
CREATE SERVICE "SASoapTest/EmployeeList" TYPE 'SOAP' AUTHORIZATION OFF SECURE OFF USER DBA DATATYPE OUT AS SELECT * FROM Employees; |
この例では、DATATYPE OUT が指定されているため、XML 結果セット応答にデータ型情報が生成されます。Web サーバからの応答の一部を次に示します。型情報はデータベース・カラムのデータ型に一致します。
<xsd:element name='EmployeeID' minOccurs='0' type='xsd:int' /> <xsd:element name='ManagerID' minOccurs='0' type='xsd:int' /> <xsd:element name='Surname' minOccurs='0' type='xsd:string' /> <xsd:element name='GivenName' minOccurs='0' type='xsd:string' /> <xsd:element name='DepartmentID' minOccurs='0' type='xsd:int' /> <xsd:element name='Street' minOccurs='0' type='xsd:string' /> <xsd:element name='City' minOccurs='0' type='xsd:string' /> <xsd:element name='State' minOccurs='0' type='xsd:string' /> <xsd:element name='Country' minOccurs='0' type='xsd:string' /> <xsd:element name='PostalCode' minOccurs='0' type='xsd:string' /> <xsd:element name='Phone' minOccurs='0' type='xsd:string' /> <xsd:element name='Status' minOccurs='0' type='xsd:string' /> <xsd:element name='SocialSecurityNumber' minOccurs='0' type='xsd:string' /> <xsd:element name='Salary' minOccurs='0' type='xsd:decimal' /> <xsd:element name='StartDate' minOccurs='0' type='xsd:date' /> <xsd:element name='TerminationDate' minOccurs='0' type='xsd:date' /> <xsd:element name='BirthDate' minOccurs='0' type='xsd:date' /> <xsd:element name='BenefitHealthInsurance' minOccurs='0' type='xsd:boolean' /> <xsd:element name='BenefitLifeInsurance' minOccurs='0' type='xsd:boolean' /> <xsd:element name='BenefitDayCare' minOccurs='0' type='xsd:boolean' /> <xsd:element name='Sex' minOccurs='0' type='xsd:string' /> |
SOAP サービスのプロキシとして機能し、WSDL ドキュメントを生成する DISH サービスを作成します。
CREATE SERVICE "SASoapTest_DNET" TYPE 'DISH' GROUP "SASoapTest" FORMAT 'DNET' AUTHORIZATION OFF SECURE OFF USER DBA; |
SOAP サービスと DISH サービスは、DNET フォーマットである必要があります。この例では、SOAP サービスの作成時に FORMAT 句が省略されています。その結果、SOAP サービスは DISH サービスから DNET フォーマットを継承します。
Microsoft Visual Studio を起動します。この例では、.NET Framework 2.0 の機能を使用しています。
Visual C# を使用して、新しい Windows アプリケーション・プロジェクトを作成します。
空のフォームが表示されます。
[プロジェクト] - [Web 参照の追加] を選択します。
[Web 参照の追加] ページの [URL] フィールドに、URL http://localhost:80/demo/SASoapTest_DNET を入力します。
[移動] をクリックします。
SASoapTest_DNET で使用可能なメソッドのリストが表示されます。この中に EmployeeList メソッドがあります。
[参照の追加] をクリックして完了します。
[ソリューション エクスプローラ] ウィンドウに新しい Web 参照が表示されます。
Visual Studio の [ツールボックス] から、次の図のようにリストボックスとボタンをフォームに追加します。
ボタンのテキストを Employee List に変更します。
Employee List をダブルクリックし、ボタン・クリック・イベントに次のコードを追加します。
int sqlCode; listBox1.Items.Clear(); localhost.SASoapTest_DNET proxy = new localhost.SASoapTest_DNET(); DataSet results = proxy.EmployeeList(out sqlCode); DataTableReader dr = results.CreateDataReader(); while (dr.Read()) { for (int i = 0; i < dr.FieldCount; i++) { string columnName = "(" + dr.GetDataTypeName(i) + ")" + dr.GetName(i); if (dr.IsDBNull(i)) { listBox1.Items.Add(columnName + "=(null)"); } else { System.TypeCode typeCode = System.Type.GetTypeCode(dr.GetFieldType(i)); switch (typeCode) { case System.TypeCode.Int32: Int32 intValue = dr.GetInt32(i); listBox1.Items.Add(columnName + "=" + intValue); break; case System.TypeCode.Decimal: Decimal decValue = dr.GetDecimal(i); listBox1.Items.Add(columnName + "=" + decValue.ToString("c")); break; case System.TypeCode.String: string stringValue = dr.GetString(i); listBox1.Items.Add(columnName + "=" + stringValue); break; case System.TypeCode.DateTime: DateTime dateValue = dr.GetDateTime(i); listBox1.Items.Add(columnName + "=" + dateValue); break; case System.TypeCode.Boolean: Boolean boolValue = dr.GetBoolean(i); listBox1.Items.Add(columnName + "=" + boolValue); break; case System.TypeCode.DBNull: listBox1.Items.Add(columnName + "=(null)"); break; default: listBox1.Items.Add(columnName + "=(unsupported)"); break; } } } listBox1.Items.Add(""); } dr.Close(); |
この例は、アプリケーション開発者が利用可能なデータ型情報に対して詳細に制御する様子を示すためのものです。
プログラムをビルドし、実行します。
Web サーバからの XML 応答には、フォーマットされた結果セットが含まれます。フォーマットされた結果セットの最初のローは、次のとおりです。
<row> <EmployeeID>102</EmployeeID> <ManagerID>501</ManagerID> <Surname>Whitney</Surname> <GivenName>Fran</GivenName> <DepartmentID>100</DepartmentID> <Street>9 East Washington Street</Street> <City>Cornwall</City> <State>NY</State> <Country>USA</Country> <PostalCode>02192</PostalCode> <Phone>6175553985</Phone> <Status>A</Status> <SocialSecurityNumber>017349033</SocialSecurityNumber> <Salary>45700.000</Salary> <StartDate>1984-08-28-05:00</StartDate> <TerminationDate xsi:nil="true" /> <BirthDate>1958-06-05-05:00</BirthDate> <BenefitHealthInsurance>1</BenefitHealthInsurance> <BenefitLifeInsurance>1</BenefitLifeInsurance> <BenefitDayCare>0</BenefitDayCare> <Sex>F</Sex> </row> |
XML 結果セット応答について、注意しなければならない点がいくつかあります。
yyyy-mm-dd-HH:MM
または yyyy-mm-dd+HH:MM
のようにフォーマットされます。ゾーン・オフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。
hh:mm:ss.nnn-HH:MM
または hh:mm:ss.nnn+HH:MM
のようにフォーマットされます。ゾーン・オフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。
yyyy-mm-ddThh:mm:ss.nnn-HH:MM
または yyyy-mm-ddThh:mm:ss.nnn+HH:MM
のようにフォーマットされます。日付と時刻は、文字 T で区切られます。ゾーン・オフセット (-HH:MM または +HH:MM) は文字列のサフィックスとして付きます。
リストボックスに、EmployeeList 結果セットが「(型)カラム名=値」のペアで表示されます。結果セットの最初のローを処理した結果は、次のとおりです。
(Int32)EmployeeID=102 (Int32)ManagerID=501 (String)Surname=Whitney (String)GivenName=Fran (Int32)DepartmentID=100 (String)Street=9 East Washington Street (String)City=Cornwall (String)State=New York (String)Country=USA (String)PostalCode=02192 (String)Phone=6175553985 (String)Status=A (String)SocialSecurityNumber=017349033 (String)Salary=$45,700.00 (DateTime)StartDate=28/08/1984 0:00:00 AM (DateTime)TerminationDate=(null) (DateTime)BirthDate=05/06/1958 0:00:00 AM (Boolean)BenefitHealthInsurance=True (Boolean)BenefitLifeInsurance=True (Boolean)BenefitDayCare=False (String)Sex=F |
結果について、注意しなければならない点がいくつかあります。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |