Invocación de funciones de Table-Valued 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 con valores de tabla en SQL Server. El adaptador expone las funciones con valores de tabla 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 de Table-Valued en SQL Server mediante el adaptador de SQL.
En este tema se muestra cómo invocar la función TVF_EMPLOYEE en una base de datos de SQL Server. La función TVF_EMPLOYEE toma la designación de un empleado en la tabla Employee y devuelve el registro del empleado. La función TVF_EMPLOYEE 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 con valores de tabla TVF_EMPLOYEE en la tabla Employee . TVF_EMPLOYEE función y la tabla Employee se crean ejecutando el script SQL proporcionado con los ejemplos. También se proporciona un ejemplo de TableFunction_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 con valores de tabla | TableValuedFunctions_[SCHEMA]Client |
[SCHEMA] = Colección de artefactos de SQL Server; por ejemplo, dbo.
Firma de método para invocar funciones con valores de tabla
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 función con valores de tabla | public [NAMESPACE][FUNCTION_NAME][] [FUNCTION_NAME](param1, param2, ...) |
[NAMESPACE] = El espacio de nombres, por ejemplo, schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE
[FUNCTION_NAME] = Nombre de la función con valores de tabla.
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 TVF_EMPLOYEE , en el esquema dbo, que toma la designación de empleado como parámetro y devuelve el registro de empleado.
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);
}
En este fragmento de código, TableValuedFunctions_dboClient es el nombre de la clase WCF en sqlAdapterBindingClient.cs generado por el complemento Add Adapter Service Reference.
Parámetros para invocar funciones con valores de tabla
Los parámetros de los métodos expuestos por el adaptador de SQL para invocar una función con valores de tabla son los mismos que los parámetros definidos en la definición de función en SQL Server. Por ejemplo, el parámetro para invocar la función con valores de tabla TVF_EMPLOYEE es emp_desig y toma la designación de un empleado.
De nuevo, el valor devuelto de una función con valores de tabla es el mismo que el valor devuelto definido en la definición de función en SQL Server. Por ejemplo, el valor devuelto de la función TVF_EMPLOYEE es una matriz de registros de tipo schemas.microsoft.com.Sql._2008._05.Types.TableFunctionReturnTables.dbo.TVF_EMPLOYEE[].
Crear un cliente WCF para invocar funciones con valores de tabla
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 con valores de tabla TVF_EMPLOYEE .
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 TVF_EMPLOYEE . 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.
TableValuedFunctions_dboClient client = new TableValuedFunctions_dboClient("SqlAdapterBinding_TableValuedFunctions_dbo"); client.ClientCredentials.UserName.UserName = "<Enter user name here>"; client.ClientCredentials.UserName.Password = "<Enter password here>";
En este fragmento de código,
TableValuedFunctions_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_TableValuedFunctions_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 TVF_EMPLOYEE para recuperar todos los registros de empleados que tengan la designación "Manager".
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(); }
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 id. de empleado, el nombre y el salario de todos los empleados con una designación de "Administrador".