Aufrufen schwach typierter gespeicherter Prozeduren in SQL mithilfe des WCF-Dienstmodells

Wenn Sie eine Prozedur aufrufen, die unter dem Knoten "Prozeduren " im Add Adapter Service Reference Plug-In aufgeführt ist, befindet sich die Ausgabe in Form eines DataSet-Arrays. Dieses Thema enthält Anweisungen zum Erstellen eines WCF-Clients zum Aufrufen einer gespeicherten Prozedur in SQL Server, die ein DataSet-Array zurückgibt.

Hinweis

Wenn Sie Vorgänge für Tabellen mit Spalten mit benutzerdefinierten Typen ausführen, stellen Sie sicher, dass Sie auf Vorgänge in Tabellen und Ansichten mit User-Defined Typen unter Verwendung des SQL-Adapters verweisen, bevor Sie mit der Entwicklung der Anwendung beginnen.

Informationen zu den in diesem Thema verwendeten Beispielen

Im Beispiel in diesem Thema wird die gespeicherte Prozedur GET_EMP_DETAILS verwendet. Diese gespeicherte Prozedur verwendet eine Mitarbeiter-ID als Eingabeparameter und gibt alle entsprechenden Spalten für den Mitarbeiter mit dieser ID zurück. Die gespeicherte Prozedur GET_EMP_DETAILS wird erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispieldateien bereitgestellt wird. Weitere Informationen zu Beispielen finden Sie unter Adapterbeispiele. Ein Beispiel, Execute_StoredProc, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt.

Die WCF-Clientklasse

Der Name des WCF-Clients, der für das Aufrufen gespeicherter Prozeduren unter dem Knoten "Prozeduren " mithilfe des SQL-Adapters generiert wird, wird in der folgenden Tabelle aufgeführt.

SQL Server-Datenbankartefakt Name des WCF-Clients
Prozedur (unter dem Knoten "Prozeduren ") Verfahren_[schema]Kunde

[Schema] ist das Schema, zu dem die Prozedur gehört; z. B. "dbo".

Methodensignatur für das Aufrufen gespeicherter Prozeduren

Die folgende Tabelle zeigt die Signatur für die Methode, die zum Aufrufen der gespeicherten Prozeduren verfügbar gemacht wird.

Vorgang Methodensignatur
Prozedurname System.Data.DataSet[] [procedure_name](param1, param2, ...)

[procedure_name] ist der Name des Verfahrens; z. B. GET_EMP_DETAILS

Die Signatur der Methode zum Aufrufen der GET_EMP_DETAILS-Prozedur wird beispielsweise im folgenden Codeausschnitt gezeigt.

public partial class Procedures_dboClient : System.ServiceModel.ClientBase<Procedures_dbo>, Procedures_dbo {  
  public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);  
}  

In diesem Codeausschnitt:

  • Procedures_dboClient ist der Name der WCF-Clientklasse. In diesem Beispiel verwenden Sie diese Klasse, um einen Client zum Aufrufen der gespeicherten Prozedur zu erstellen.

  • public System.Data.DataSet[] GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue) ist die Methode, die Sie in diesem Beispiel aufrufen, um die gespeicherte Prozedur aufzurufen. Diese gespeicherte Prozedur verwendet eine Mitarbeiter-ID und gibt ein DataSet-Array zurück.

Erstellen eines WCF-Clients zum Aufrufen einer gespeicherten Prozedur in SQL Server

Der allgemeine Satz von Aktionen, die zum Ausführen eines Vorgangs auf SQL Server mit einem WCF-Client erforderlich sind, umfasst eine Reihe von Aufgaben, die in der Übersicht über das WCF-Dienstmodell mit dem Adapter beschrieben werden. In diesem Abschnitt wird beschrieben, wie Sie einen WCF-Client erstellen, der eine gespeicherte Prozedur aufruft, deren Ergebnismenge ein DataSet-Array ist. In diesem Thema wird beispielsweise die gespeicherte Prozedur GET_EMP_DETAILS aufgerufen. Diese gespeicherte Prozedur wird durch Ausführen des SQL-Skripts erstellt, das für jedes Beispiel bereitgestellt wird.

  1. Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.

  2. Generieren Sie die WCF-Clientklasse für die gespeicherte GET_EMP_DETAILS Prozedur. Stellen Sie sicher, dass Sie die Prozedur unter dem Knoten "Prozeduren " auswählen. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Client- oder WCF-Dienstvertrags für SQL Server Artifacts.

    Von Bedeutung

    Stellen Sie vor dem Generieren der WCF-Clientklasse sicher, dass Sie die Bindungseigenschaft EnableBizTalkCompatibilityMode auf "false" festlegen.

  3. Fügen Sie im Projektmappen-Explorer Verweise auf Microsoft.Adapters.Sql und Microsoft.ServiceModel.Channels hinzu.

  4. Öffnen Sie die Program.cs Datei, und erstellen Sie einen Client, wie im folgenden Codeausschnitt beschrieben.

    
              Procedures_dboClient client = new Procedures_dboClient("SqlAdapterBinding_Procedures_dbo");  
    
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    In diesem Codeausschnitt Procedures_dboClient ist der WCF-Client, der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert. SqlAdapterBinding_Procedures_dbo ist der Name der Clientendpunktkonfiguration und wird in der app.configdefiniert. Diese Datei wird auch vom Add Adapter Service Reference Plug-In generiert und enthält die Bindungseigenschaften und andere Konfigurationseinstellungen.

    Hinweis

    In diesem Codeausschnitt verwenden Sie die Bindungs- und Endpunktadresse aus der Konfigurationsdatei. Sie können diese Werte auch explizit in Ihrem Code angeben. Weitere Informationen zu den verschiedenen Methoden zum Angeben der Clientbindung finden Sie unter Konfigurieren einer Clientbindung für den SQL-Adapter.

  5. Öffnen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    try  
    {  
       Console.WriteLine("Opening Client...");  
       client.Open();  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    
  6. Rufen Sie die GET_EMP_DETAILS gespeicherte Prozedur auf. Bevor Sie die GET_EMP_DETAILS-Prozedur aufrufen, müssen Sie dem Code den System.Data Namespace hinzufügen.

    DataSet[] dataArray;  
    int returnCode;  
    
    try  
    {  
       Console.WriteLine("Calling a stored procedure...");  
       dataArray = client.GET_EMP_DETAILS(10001, out returnCode);  //Invoke the stored procedure  
    }  
    catch (Exception ex)  
    {  
       Console.WriteLine("Exception: " + ex.Message);  
       throw;  
    }  
    Console.WriteLine("The details for the employee with ID '10001' are:");  
    Console.WriteLine("*************************************************");  
    
    foreach (DataSet dataSet in dataArray)  
    {  
       foreach (DataTable tab in dataArray[0].Tables)  
       {  
          foreach (DataRow row in tab.Rows)  
          {  
             for (int i = 0; i < tab.Columns.Count; i++)  
             {  
                Console.WriteLine(row[i]);  
             }  
          }  
       }  
    }  
    Console.WriteLine("*************************************************");  
    
    
  7. Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:

    client.Close();  
    Console.WriteLine("Press any key to exit...");  
    Console.ReadLine();  
    
  8. Erstellen Sie das Projekt, und führen Sie es aus. Die Details für den Mitarbeiter, für den Sie

  9. Vorausgesetzt, dass die IDs bereitgestellt wurden, werden sie auf der Konsole angezeigt.

Siehe auch

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells