Aufrufen von Skalarfunktionen in SQL Server mithilfe des WCF-Dienstmodells
Sie können den SQL-Adapter in einer .NET-Anwendung mithilfe des WCF-Dienstmodells verwenden, um Skalarfunktionen in SQL Server aufzurufen. Der Adapter macht die Skalarfunktionen 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 von Skalarfunktionen in SQL Server mithilfe des SQL-Adapters.
In diesem Thema wird das Aufrufen von Skalarfunktionen mithilfe des WCF-Dienstmodells veranschaulicht.
In diesem Thema wird veranschaulicht, wie die funktion GET_EMP_ID in einer SQL Server-Datenbank aufgerufen wird. Die funktion GET_EMP_ID nimmt die Bezeichnung eines Mitarbeiters in der Tabelle Mitarbeiter an und gibt die entsprechende Mitarbeiter-ID zurück. Die GET_EMP_ID-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 GET_EMP_ID Skalarfunktion für die Tabelle Employee aufgerufen. Die GET_EMP_ID-Funktion und die Tabelle Employee werden erstellt, indem das sql-Skript ausgeführt wird, das mit den Beispielen bereitgestellt wird. Ein Beispiel, ScalarFunction_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 |
---|---|
Skalarfunktion | ScalarFunctions_[SCHEMA]Client |
[SCHEMA] = Sammlung von SQL Server Artefakten, z. B. dbo.
Methodensignatur zum Aufrufen skalarer Funktionen
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 |
---|---|
Name der Skalarfunktion | public <return_type><scalar_function_name> (Param1, Param2, ...) |
<> retrun_type = In der Funktionsdefinition definierte Rückgabetyp
<> scalar_function_name = Name der Skalarfunktion.
Der folgende Code zeigt beispielsweise die Methodensignaturen für eine WCF-Clientklasse, die für die GET_EMP_ID Skalarfunktionen im dbo-Schema generiert wurde, das die Mitarbeiterbezeichnung als Parameter akzeptiert und eine Mitarbeiter-ID (ganzzahlig) zurückgibt.
public partial class ScalarFunctions_dboClient : System.ServiceModel.ClientBase<ScalarFunctions_dbo>, ScalarFunctions_dbo {
public System.Nullable<int> GET_EMP_ID(string emp_desig);
}
In diesem Codeausschnitt ist ScalarFunctions_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 Skalarfunktionen
Die Parameter für die Methoden, die vom SQL-Adapter zum Aufrufen einer Skalarfunktion verfügbar gemacht werden, sind identisch mit den Parametern, die in der Skalarfunktionsdefinition in SQL Server definiert sind. Beispielsweise ist der Parameter zum Aufrufen der GET_EMP_ID Skalarfunktion emp_desig und nimmt die Bezeichnung eines Mitarbeiters an.
Auch hier ist der Rückgabewert für eine Skalarfunktion identisch mit dem Rückgabewert, der in der Skalarfunktionsdefinition in SQL Server definiert ist. Beispielsweise ist der Rückgabewert für die funktion GET_EMP_ID die ID eines Mitarbeiters vom Typ integer.
Erstellen eines WCF-Clients zum Aufrufen von Skalarfunktionen
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 GET_EMP_ID Skalarfunktion aufzurufen.
So erstellen Sie einen WCF-Client
Erstellen Sie ein Visual C#-Projekt in Visual Studio. Erstellen Sie für dieses Thema eine Konsolenanwendung.
Generieren Sie die WCF-Clientklasse für die GET_EMP_ID Skalarfunktion. Weitere Informationen zum Generieren einer WCF-Clientklasse finden Sie unter Generieren eines WCF-Clients oder WCF-Dienstvertrags für SQL Server Artifacts.
Fügen Sie im Projektmappen-Explorer verweis auf
Microsoft.Adapters.Sql
undMicrosoft.ServiceModel.Channels
hinzu.Öffnen Sie program.cs, und erstellen Sie einen Client, wie im folgenden Codeausschnitt beschrieben.
ScalarFunctions_dboClient client = new ScalarFunctions_dboClient("SqlAdapterBinding_ScalarFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
In diesem Codeausschnitt ist der WCF-Client,
ScalarFunctions_dboClient
der in SqlAdapterBindingClient.cs definiert ist. Diese Datei wird vom Add Adapter Service Reference Plug-In generiert.SqlAdapterBinding_ScalarFunctions_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.
Ö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; }
Rufen Sie die funktion GET_EMP_ID auf, um die ID für einen Mitarbeiter mit der Bezeichnung "Manager" abzurufen.
Console.WriteLine("Invoking the GET_EMP_ID function"); string emp_designation = "Manager"; try { System.Nullable<int> emp_id = client.GET_EMP_ID(emp_designation); Console.WriteLine("The Employee ID for the employee with 'Manager' designation is:" + emp_id); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); throw; }
Hinweis
Der Einfachheit halber enthält die Tabelle Employee nur einen Mitarbeiter mit der Bezeichnung "Manager". Wenn Ihre Zieltabelle mehr Mitarbeiter mit der gleichen Bezeichnung enthält, müssen Sie die Funktion entsprechend definieren.
Schließen Sie den Client wie im folgenden Codeausschnitt beschrieben:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Erstellen Sie das Projekt, und führen Sie es dann aus. Die Anwendung zeigt die Mitarbeiter-ID des Mitarbeiters mit der Bezeichnung "Manager" an.