Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste

 

Praktische Einführung: Datentypen in Microsoft .NET verwenden

In der folgenden Einführung wird gezeigt, wie die Datentyp-Unterstützung des SQL Anywhere-Webdienstes in Microsoft .NET mit Visual C# verwendet wird.

♦  So erstellen Sie SOAP- und DISH-Dienste
  1. 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
  2. Starten Sie Interactive SQL. Verbinden Sie sich mit der SQL Anywhere-Beispieldatenbank als Benutzer mit DBA-Berechtigung. Führen Sie die folgenden Anweisungen aus:

    1. 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' />
    2. 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.

  3. Starten Sie Microsoft Visual Studio. Beachten Sie, dass dieses Beispiel Funktionen aus .NET Framework 2.0 verwendet.

    1. Erstellen Sie ein neues Windows-Anwendungsprojekt unter Verwendung von Visual C#.

      Ein leeres Formular wird angezeigt.

    2. Wählen Sie im Menü Projekt die Option Webverweis hinzufügen.

    3. Geben Sie auf der Seite Webverweis hinzufügen im Feld URL die folgende URL ein: http://localhost:80/demo/SASoapTest_DNET.

    4. Klicken Sie auf Gehe zu.

      Eine Liste der für SASoapTest_DNET verfügbaren Methoden wird angezeigt. Die Methode EmployeeList sollte angezeigt werden.

    5. Klicken Sie auf Verweis hinzufügen, um fortzufahren.

      Im Fenster Projektmappen-Explorer wird der neue Webverweis angezeigt.

    6. Von der Visual Studio Toolbox aus fügen Sie dem Formular ein Listenfeld und eine Schaltfläche hinzu, wie im folgenden Diagramm dargestellt.

      SOAP-Demonstrationsformular.
    7. Ändern Sie den Schaltflächentext in Employee List.

    8. 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.

    9. 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.

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.