Invocar funciones escalares en SQL Server mediante el modelo de servicio WCF
Puede usar el adaptador de SQL en una aplicación .NET mediante el modelo de servicio WCF para invocar funciones escalares en SQL Server. El adaptador expone las funciones escalares como métodos que se pueden invocar directamente en SQL Server. Para obtener más información sobre cómo el adaptador admite funciones escalares, consulte Ejecución de funciones escalares en SQL Server mediante el adaptador de SQL.
Cómo se muestra en este tema la invocación de funciones escalares mediante el modelo de servicio WCF
En este tema se muestra cómo invocar la función GET_EMP_ID en una base de datos SQL Server. La función GET_EMP_ID toma la designación de un empleado en la tabla Employee y devuelve el identificador de empleado correspondiente. La función GET_EMP_ID y la tabla Employee se crean mediante la ejecución del script SQL proporcionado con los ejemplos. Para obtener más información, vea Ejemplos de adaptador.
Acerca de los ejemplos usados en este tema
En el ejemplo de este tema se invocó la función escalar GET_EMP_ID en la tabla Employee. La función GET_EMP_ID y la tabla Employee se crean mediante la ejecución del script SQL proporcionado con los ejemplos. También se proporciona un ejemplo de ScalarFunction_ServiceModel, que se basa en este tema, con los ejemplos del adaptador de SQL. Para obtener más información, vea Ejemplos de adaptador.
Clase de cliente WCF
El nombre del cliente WCF generado para invocar la función escalar en SQL Server mediante el adaptador de SQL se muestra en la tabla siguiente.
artefacto de base de datos de SQL Server | Nombre del cliente WCF |
---|---|
Función escalar | ScalarFunctions_[SCHEMA]Client |
[SCHEMA] = Colección de artefactos de SQL Server; por ejemplo, dbo.
Firma de método para invocar funciones escalares
En la tabla siguiente se muestran las firmas de método para las operaciones básicas de una tabla. Las firmas son las mismas para una vista, salvo que el espacio de nombres y el nombre de la vista reemplazan a los de la tabla.
Operación | Firma del método |
---|---|
Nombre de la función escalar | public <return_type scalar_function_name><>(param1, param2, ...) |
<> retrun_type = Tipo de valor devuelto definido en la definición de función
<> scalar_function_name = Nombre de la función escalar.
Por ejemplo, en el código siguiente se muestran las firmas de método para una clase de cliente WCF generada para las funciones escalares de GET_EMP_ID , en el esquema dbo, que toma la designación de empleado como parámetro y devuelve un identificador de empleado (entero).
public partial class ScalarFunctions_dboClient : System.ServiceModel.ClientBase<ScalarFunctions_dbo>, ScalarFunctions_dbo {
public System.Nullable<int> GET_EMP_ID(string emp_desig);
}
En este fragmento de código, ScalarFunctions_dboClient es el nombre de la clase WCF en sqlAdapterBindingClient.cs generado por el complemento Add Adapter Service Reference.
Parámetros para invocar funciones escalares
Los parámetros de los métodos expuestos por el adaptador de SQL para invocar una función escalar son los mismos que los parámetros definidos en la definición de función escalar en SQL Server. Por ejemplo, el parámetro para invocar la función escalar GET_EMP_ID es emp_desig y toma la designación de un empleado.
De nuevo, el valor devuelto de una función escalar es el mismo que el valor devuelto definido en la definición de función escalar en SQL Server. Por ejemplo, el valor devuelto de la función GET_EMP_ID es el identificador de un empleado de tipo entero.
Crear un cliente WCF para invocar funciones escalares
El conjunto genérico de acciones necesarias para realizar una operación en SQL Server mediante un cliente WCF implica un conjunto de tareas descritas en Información general del modelo de servicio WCF con el adaptador de SQL. En esta sección se describe cómo crear un cliente WCF para invocar la función escalar GET_EMP_ID .
Para crear un cliente WCF
Cree un proyecto de Visual C# en Visual Studio. Para este tema, cree una aplicación de consola.
Genere la clase de cliente WCF para la función escalar GET_EMP_ID . Para obtener más información sobre cómo generar una clase de cliente WCF, vea Generar un cliente WCF o un contrato de servicio WCF para SQL Server Artefactos.
En el Explorador de soluciones, agregue referencia a
Microsoft.Adapters.Sql
yMicrosoft.ServiceModel.Channels
.Abra Program.cs y cree un cliente como se describe en el fragmento de código siguiente.
ScalarFunctions_dboClient client = new ScalarFunctions_dboClient("SqlAdapterBinding_ScalarFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
En este fragmento de código,
ScalarFunctions_dboClient
es el cliente WCF definido en SqlAdapterBindingClient.cs. El complemento Add Adapter Service Reference (Agregar referencia del servicio de adaptador) genera este archivo.SqlAdapterBinding_ScalarFunctions_dbo
es el nombre de la configuración del punto de conexión de cliente y se define en el app.config. El complemento Agregar referencia del servicio de adaptador también genera este archivo y contiene las propiedades de enlace y otras opciones de configuración.Nota
En este fragmento de código, se usa el enlace y la dirección del punto de conexión del archivo de configuración. También puede especificar explícitamente estos valores en el código. Para obtener más información sobre las distintas formas de especificar el enlace de cliente, vea Configurar un enlace de cliente para el adaptador de SQL.
Abra el cliente como se describe en el fragmento de código siguiente:
try { Console.WriteLine("Opening Client..."); client.Open(); } catch (Exception ex) { Console.WriteLine("Exception: " + ex.Message); throw; }
Invoque la función GET_EMP_ID para recuperar el identificador de un empleado con la designación como "Manager".
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; }
Nota
Por motivos de simplicidad, la tabla Employee tiene solo un empleado con la designación "Manager". Si la tabla de destino tiene más empleados con la misma designación, debe definir la función en consecuencia.
Cierre el cliente como se describe en el fragmento de código siguiente:
client.Close(); Console.WriteLine("Press any key to exit..."); Console.ReadLine();
Compile el proyecto y ejecútelo. La aplicación muestra el identificador de empleado del empleado con la designación de "Manager".