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

Wenn Sie eine Prozedur aufrufen, die unter dem Knoten Strongly-Typed Prozeduren im Add-Adapter-Service-Reference-Plug-In aufgeführt ist, liegt die Ausgabe in Form einer stark typisierten Ergebnismenge vor. Dieses Thema enthält Anweisungen zum Erstellen eines WCF-Clients zum Aufrufen gespeicherter Prozeduren in SQL Server, die eine stark typisierte Ergebnismenge zurückgeben.

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 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_TypedStoredProcedure, 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 "Strongly-Typed Prozeduren " mithilfe des SQL-Adapters generiert wurde, wird in der folgenden Tabelle aufgeführt.

SQL Server-Datenbankartefakt Name des WCF-Clients
Prozedur (unter dem Knoten Strongly-Typed Prozeduren) EingegebeneProzeduren_[schema]Client

[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 [PROC_NS] [procedure_name](Param1, Param2, ...)

[PROC_NS] ist der Procedure-Namespace; Beispiel: schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[]

[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 TypedProcedures_dboClient : System.ServiceModel.ClientBase<TypedProcedures_dbo>, TypedProcedures_dbo{  
public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[]   
  GET_EMP_DETAILS(System.Nullable<int> emp_id, out int ReturnValue);  
}  

In diesem Codeausschnitt:

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

  • public schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] 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 eine stark typisierte Ergebnismenge 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 SQL-Adapter beschrieben sind. In diesem Abschnitt wird speziell beschrieben, wie man einen WCF-Client erstellt, der eine gespeicherte Prozedur aufruft, deren Resultset stark typisiert 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 Strongly-Typed 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.

    
              TypedProcedures_dboClient client = new TypedProcedures_dboClient("SqlAdapterBinding_TypedProcedures_dbo");  
    client.ClientCredentials.UserName.UserName = "<Enter username here>";  
    client.ClientCredentials.UserName.Password = "<Enter username here>";  
    

    In diesem Codeausschnitt TypedProcedures_dboClient ist der WCF-Client, der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert. SqlAdapterBinding_TypedProcedures_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, wie im folgenden Codeausschnitt beschrieben.

    // Create array of type as specified in the method signature  
    schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[] resultSet =  
       new schemas.microsoft.com.Sql._2008._05.ProceduresResultSets.dbo.GET_EMP_DETAILS.StoredProcedureResultSet0[1];  
    int returnCode;  
    
    try  
    {  
       Console.WriteLine("Calling a stored procedure...");  
       resultSet = 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("*************************************************");  
    
    for (int i = 0; i < resultSet.Length; i++)  
       {  
          Console.WriteLine("Employee Name        : " + resultSet[i].Name);  
          Console.WriteLine("Employee Designation : " + resultSet[i].Designation);  
          Console.WriteLine("Employee Salary      : " + resultSet[i].Salary);  
       }  
    
    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. Der Name, die Bezeichnung und das Gehalt für die Mitarbeiter-ID werden auf der Konsole angezeigt.

Siehe auch

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells