Freigeben über


Aufrufen Table-Valued Funktionen in SQL Server mithilfe des WCF-Dienstmodells

Sie können den SQL-Adapter in einer .NET-Anwendung mithilfe des WCF-Dienstmodells verwenden, um Tabellenwertfunktionen in SQL Server aufzurufen. Der Adapter macht die Tabellenwertfunktionen als Methoden verfügbar, die direkt auf SQL Server aufgerufen werden können. Weitere Informationen dazu, wie der Adapter Skalarfunktionen unterstützt, finden Sie unter Ausführen Table-Valued Funktionen in SQL Server mithilfe des SQL-Adapters.

In diesem Thema wird veranschaulicht, wie die TVF_EMPLOYEE-Funktion in einer SQL Server-Datenbank aufgerufen wird. Die funktion TVF_EMPLOYEE nimmt die Bezeichnung eines Mitarbeiters in der Tabelle Mitarbeiter an und gibt den Datensatz für den Mitarbeiter zurück. Die TVF_EMPLOYEE-Funktion und die Tabelle Employee werden erstellt, indem das SQL-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Weitere Informationen finden Sie unter Adapterbeispiele.

Informationen zu den in diesem Thema verwendeten Beispielen

Im Beispiel in diesem Thema wurde die TVF_EMPLOYEE Tabellenwertfunktion für die Tabelle Employee aufgerufen. TVF_EMPLOYEE Funktion und die Tabelle Employee werden erstellt, indem das sql-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Ein Beispiel, TableFunction_ServiceModel, das auf diesem Thema basiert, wird auch mit den SQL-Adapterbeispielen bereitgestellt. Weitere Informationen finden Sie unter Adapterbeispiele.

Die WCF-Clientklasse

Der Name des WCF-Clients, der zum Aufrufen der Skalarfunktion in SQL Server mithilfe des SQL-Adapters generiert wurde, ist in der folgenden Tabelle aufgeführt.

SQL Server-Datenbankartefakt WCF-Clientname
Tabellenwertfunktion TableValuedFunctions_[SCHEMA]Client

[SCHEMA] = Sammlung von SQL Server Artefakten, z. B. dbo.

Methodensignatur zum Aufrufen von Tabellenwertfunktionen

Die folgende Tabelle zeigt die Methodensignaturen für die grundlegenden Vorgänge für eine Tabelle. Die Signaturen sind für eine Ansicht identisch, mit der Ausnahme, dass der Ansichtsnamespace und der Name die der Tabelle ersetzen.

Vorgang Methodensignatur
Tabellenwertfunktionsname public [NAMESPACE][FUNCTION_NAME][] [FUNCTION_NAME](param1, param2, ...)

[NAMESPACE] = Der Namespace, z. B. schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE

[FUNCTION_NAME] = Name der Tabellenwertfunktion.

Der folgende Code zeigt beispielsweise die Methodensignaturen für eine WCF-Clientklasse, die für die TVF_EMPLOYEE Skalarfunktionen im dbo-Schema generiert wird, das die Mitarbeiterbezeichnung als Parameter akzeptiert und den Mitarbeiterdatensatz zurückgibt.

public partial class TableValuedFunctions_dboClient : System.ServiceModel.ClientBase<TableValuedFunctions_dbo>, TableValuedFunctions_dbo {      
    public schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] TVF_EMPLOYEE(string emp_desig);  
}  

In diesem Codeausschnitt ist TableValuedFunctions_dboClient der Name der WCF-Klasse in der SqlAdapterBindingClient.cs, die vom Add Adapter Service Reference Plug-In generiert wird.

Parameter für das Aufrufen von Tabellenwertfunktionen

Die Parameter für die Methoden, die vom SQL-Adapter zum Aufrufen einer Tabellenwertfunktion verfügbar gemacht werden, sind identisch mit den Parametern, die in der Funktionsdefinition in SQL Server definiert sind. Beispielsweise ist der Parameter zum Aufrufen der TVF_EMPLOYEE Tabellenwertfunktion emp_desig und nimmt die Bezeichnung eines Mitarbeiters an.

Auch hier ist der Rückgabewert für eine Tabellenwertfunktion identisch mit dem Rückgabewert, der in der Funktionsdefinition in SQL Server definiert ist. Der Rückgabewert für die funktion TVF_EMPLOYEE ist beispielsweise ein Array von Datensätzen vom Typ schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[].

Erstellen eines WCF-Clients zum Aufrufen von Tabellenwertfunktionen

Der generische Satz von Aktionen, die erforderlich sind, um einen Vorgang auf SQL Server mithilfe eines WCF-Clients auszuführen, umfasst eine Reihe von Aufgaben, die unter Übersicht über das WCF-Dienstmodell mit dem SQL-Adapter beschrieben werden. In diesem Abschnitt wird beschrieben, wie Sie einen WCF-Client erstellen, um die TVF_EMPLOYEE Tabellenwertfunktion aufzurufen.

  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 TVF_EMPLOYEE Skalarfunktion. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artifacts.

  3. Fügen Sie im Projektmappen-Explorer verweis auf Microsoft.Adapters.Sql und Microsoft.ServiceModel.Channelshinzu.

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

    
              TableValuedFunctions_dboClient client = new TableValuedFunctions_dboClient("SqlAdapterBinding_TableValuedFunctions_dbo");  
    client.ClientCredentials.UserName.UserName = "<Enter user name here>";  
    client.ClientCredentials.UserName.Password = "<Enter password here>";  
    

    In diesem Codeausschnitt ist der WCF-Client, TableValuedFunctions_dboClient der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert. SqlAdapterBinding_TableValuedFunctions_dbo ist der Name der Clientendpunktkonfiguration und wird im app.config definiert. 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 im 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 funktion TVF_EMPLOYEE auf, um alle Mitarbeiterdatensätze mit der Bezeichnung "Manager" abzurufen.

    Console.WriteLine("Invoking the TVF_EMPLOYEE function");  
    schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[] emp_details;  
    string emp_designation = "Manager";  
    
    try  
    {  
        emp_details = client.TVF_EMPLOYEE(emp_designation);  
    }  
    catch (Exception e)  
    {  
        Console.WriteLine("Exception: " + e.Message);  
        throw;  
    }  
    Console.WriteLine("The details for the employee with the 'Manager' designation are:");  
    Console.WriteLine("*******************************************************************");  
    for (int i = 0; i < emp_details.Length; i++)  
    {  
        Console.WriteLine("Employee ID        : " + emp_details[i].Employee_ID);  
        Console.WriteLine("Employee Name      : " + emp_details[i].Name);  
        Console.WriteLine("Employee Desigation: " + emp_details[i].Designation);  
        Console.WriteLine("Employee Salary    : " + emp_details[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 dann aus. Die Anwendung zeigt die Mitarbeiter-ID, den Namen und das Gehalt aller Mitarbeiter mit der Bezeichnung "Manager" an.

Weitere Informationen

Entwickeln von Anwendungen mithilfe des WCF-Dienstmodells