In der folgenden Einführung wird gezeigt, wie die Datentyp-Unterstützung des SQL Anywhere-Webdienstes in Microsoft .NET mit Visual C# verwendet wird.
Führen Sie an der Eingabeaufforderung folgenden Befehl aus, um einen Personal Webserver zu starten. Ersetzen Sie Beispieldatenbank durch den tatsächlichen Speicherort der Beispieldatenbank. Die Option -xs http(port=80)
teilt dem Datenbankserver mit, HTTP-Anforderungen auf Port 80 anzunehmen. Wenn auf Port 80 bereits ein Webserver läuft, benutzen
Sie eine andere Portnummer, z.B. 8080, für diese praktische Einführung.
dbeng11 -xs http(port=80) Beispielverzeichnis\demo.db |
Starten Sie Interactive SQL. Verbinden Sie sich mit der SQL Anywhere-Beispieldatenbank als Benutzer mit DBA-Berechtigung. Führen Sie die folgenden Anweisungen aus:
Legen Sie einen SOAP-Dienst fest, der die Tabelle Employees auflistet.
CREATE SERVICE "SASoapTest/EmployeeList" TYPE 'SOAP' AUTHORIZATION OFF SECURE OFF USER DBA DATATYPE OUT AS SELECT * FROM Employees; |
In diesem Beispiel wird DATATYPE OUT angegeben, um die Datentypinformationen in der zurückgegebenen XML-Ergebnismenge zu generieren. Im Folgenden wird ein Fragment der Antwort des Webservers gezeigt. Beachten Sie, dass die Datentypinformationen mit dem Datentyp der Datenbankspalten übereinstimmen.
<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' /> |
Erstellen Sie einen DISH-Dienst, der als Proxy für den SOAP-Dienst agiert und das WSDL-Dokument generiert.
CREATE SERVICE "SASoapTest_DNET" TYPE 'DISH' GROUP "SASoapTest" FORMAT 'DNET' AUTHORIZATION OFF SECURE OFF USER DBA; |
Der SOAP- und der DISH-Dienst müssen das DNET-Format haben. In diesem Beispiel wurde die FORMAT-Klausel weggelassen, als der SOAP-Dienst erstellt wurde. Daher erbt der SOAP-Dienst das DNET-Format vom DISH-Dienst.
Starten Sie Microsoft Visual Studio. Beachten Sie, dass dieses Beispiel Funktionen aus .NET Framework 2.0 verwendet.
Erstellen Sie ein neues Windows-Anwendungsprojekt unter Verwendung von Visual C#.
Ein leeres Formular wird angezeigt.
Wählen Sie im Menü Projekt die Option Webverweis hinzufügen.
Geben Sie auf der Seite Webverweis hinzufügen im Feld URL die folgende URL ein: http://localhost:80/demo/SASoapTest_DNET.
Klicken Sie auf Gehe zu.
Eine Liste der für SASoapTest_DNET verfügbaren Methoden wird angezeigt. Die Methode EmployeeList sollte angezeigt werden.
Klicken Sie auf Verweis hinzufügen, um fortzufahren.
Im Fenster Projektmappen-Explorer wird der neue Webverweis angezeigt.
Von der Visual Studio Toolbox aus fügen Sie dem Formular ein Listenfeld und eine Schaltfläche hinzu, wie im folgenden Diagramm dargestellt.
Ändern Sie den Schaltflächentext in Employee List.
Doppelklicken Sie auf Employee List und fügen Sie den folgenden Code für das Schaltflächenereignis "Click" hinzu.
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(); |
Dieses Beispiel zeigt, welche Möglichkeiten zur Feinabstimmung dem Entwickler im Hinblick auf die verfügbaren Datentypinformationen zur Verfügung stehen.
Kompilieren Sie das Programm und führen Sie es aus.
Die XML-Antwort vom Webserver enthält eine formatierte Ergebnismenge. Im Folgenden wird die erste Zeile der formatierten Ergebnismenge gezeigt.
<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> |
Zur zurückgegebenen XML-Ergebnismenge sind einige Details zu beachten.
yyyy-mm-dd-HH:MM
oder yyyy-mm-dd+HH:MM
. An die Zeichenfolge wird ein Zeitzonen-Offset angehängt (-HH:MM oder +HH:MM).
hh:mm:ss.nnn-HH:MM
oder hh:mm:ss.nnn+HH:MM
. An die Zeichenfolge wird ein Zeitzonen-Offset angehängt (-HH:MM oder +HH:MM).
yyyy-mm-ddThh:mm:ss.nnn-HH:MM
oder yyyy-mm-ddThh:mm:ss.nnn+HH:MM
. Beachten Sie, dass das Datum durch den Buchstaben 'T' von der Zeit getrennt wird. An die Zeichenfolge wird ein Zeitzonen-Offset
angehängt (-HH:MM oder +HH:MM).
Das Listenfeld zeigt die EmployeeList-Ergebnismenge in Form von (Typ)Spaltenname=Wert-Paaren an. Im Folgenden wird das Ergebnis der Verarbeitung der ersten Zeile der Ergebnismenge gezeigt.
(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 |
Im Hinblick auf die Ergebnisse sind einige Dinge zu beachten.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |